Spring Boot Dubbo 분포 식 서비스 구축 방법

개요:
 
노드 역할 설명
노드
역할 설명
Provider
노출 서비스 제공 자
Consumer
원 격 서비스 소비 자 를 호출 하 다.
Registry
서비스 등록 및 발 견 된 등록 센터
Monitor
서비스의 호출 횟수 와 호출 시간 을 통계 하 는 모니터링 센터
Container
서비스 실행 용기
호출 관계 설명
4.567917.서비스 용기 Container 는 서비스 제공 자 를 시작,로드,실행 하 는 것 을 책임 집 니 다4.567917.서비스 제공 자 Provider 가 시 작 될 때 등록 센터 Registry 에 자신 이 제공 하 는 서 비 스 를 등록 합 니 다
  • 서비스 소비자 Consumer 가 시작 할 때 등록 센터 Registry 에 자신 이 필요 로 하 는 서 비 스 를 구독 한다.등록 센터 Registry 는 서비스 제공 자의 주소 목록 을 소비자 에 게 되 돌려 주 고 변경 등록 센터 가 있 으 면 긴 연결 을 바탕 으로 변경 데 이 터 를 소비자 에 게 전송 합 니 다
  • 4.567917.서비스 소비 자 는 공급 자 주소 목록 에서 소프트 부하 균형 알고리즘 을 바탕 으로 공급 자 를 선택 하여 호출 하고 호출 에 실패 하면 다른 한 대 를 선택한다4.567917.서비스 소비자 와 공급 자 는 메모리 에서 호출 횟수 와 호출 시간 을 통계 하고 정 해진 시간 에 1 분 에 한 번 씩 통계 데 이 터 를 모니터링 센터 Monitor 에 보 냅 니 다 프로젝트 구축
    개발 환경 은 주로 다음 과 같은 부분 과 관련된다.
  • Spring Boot
  • JDK 8
  • Dubbo 2.7.1
  • Zookeeper
  • 구체 적 인 코드 는 github 의 dubbo 모듈 을 볼 수 있 습 니 다https://github.com/UniqueDong/springboot-study
    Dubbo API
    서비스 인 터 페 이 스 를 정의 하고 jar 패키지 로 만들어 소비 자 를 의존 하 게 하 며 서비스 자 는 인 터 페 이 스 를 실현 합 니 다.이 프로젝트 는 인터페이스 정의 와 model 대상 만 있 습 니 다.@데 이 터 는 lombok 오픈 소스 라 이브 러 리 가 제공 하 는 특성 으로 개발 이 편리 합 니 다.
    model 개체 정의:
    
    @Data
    public class User implements Serializable {
      private Long id;
      private String username;
    }
    provider 인터페이스 정의:
    
    public interface UserProvider {
      List<User> listUser();
    }
    공급 자 서비스 공급 자
    pom 의존:
    spring-boot-starter 를 도입 합 니 다.dubbo-api 인 터 페 이 스 는 바로 우리 가 위 에서 언급 한 인터페이스 정의 jar,dubbo-spring-boot-starter,dubbo-dependencies-zookeeper 입 니 다.
    
    <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter</artifactId>
          <exclusions>
            <exclusion>
              <artifactId>spring-boot-starter-logging</artifactId>
              <groupId>org.springframework.boot</groupId>
            </exclusion>
          </exclusions>
        </dependency>
        <dependency>
          <groupId>zero.springboot.study</groupId>
          <artifactId>dubbo-api</artifactId>
          <version>1.0.0-SNAPSHOT</version>
        </dependency>
        <!--dubbo start-->
        <dependency>
          <groupId>org.apache.dubbo</groupId>
          <artifactId>dubbo-spring-boot-starter</artifactId>
          <version>2.7.1</version>
        </dependency>
    
        <dependency>
          <groupId>org.apache.dubbo</groupId>
          <artifactId>dubbo</artifactId>
          <version>2.7.1</version>
        </dependency>
    
        <!-- Zookeeper dependencies -->
        <dependency>
          <groupId>org.apache.dubbo</groupId>
          <artifactId>dubbo-dependencies-zookeeper</artifactId>
          <version>2.7.1</version>
          <type>pom</type>
          <exclusions>
            <exclusion>
              <artifactId>log4j</artifactId>
              <groupId>log4j</groupId>
            </exclusion>
            <exclusion>
              <artifactId>slf4j-log4j12</artifactId>
              <groupId>org.slf4j</groupId>
            </exclusion>
          </exclusions>
        </dependency>
    
        <!--dubbo end-->
        
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.2.57</version>
        </dependency>
      </dependencies>
    프로필 Yml 정의:
    
    spring:
     application:
      name: dubbo-provider
    #     
    embedded:
     zookeeper:
      # zookeeper       
      port: 2181
    
    # dubbo   
    dubbo:
     #        
     registry:
      id: dubbo-provider
      address: zookeeper://127.0.0.1:${embedded.zookeeper.port}
      group: local
     application:
      name: dubbo-provider
      id: dubbo-provider
      logger: slf4j
      qosEnable: true
      qosPort: 22224
      qosAcceptForeignIp: false
     # dubbo     
     protocol:
      # -1              
      port: -1
      name: dubbo
     scan:
      # dubbo            
      base-packages: com.zero.provider.impl
    api 정의 인터페이스 구현
    @Service 는 Dubbo 입 니 다.Spring 을 가 져 오지 마 세 요.
    
    import com.google.common.collect.Lists;
    import com.zero.api.model.User;
    import com.zero.api.provider.UserProvider;
    import org.apache.dubbo.config.annotation.Service;
    
    import java.util.List;
    
    @Service(interfaceClass = UserProvider.class)
    public class UserProviderImpl implements UserProvider {
      @Override
      public List<User> listUser() {
        User user = new User();
        user.setId(1L);
        user.setUsername("  ");
        return Lists.newArrayList(user);
      }
    }
    Consumer
    Pom 정의:
    spring-boot-starter-web 에 의존 하여 http rest 인 터 페 이 스 를 전단 에 호출 해 야 합 니 다.동시에 내부 적 으로 Dubbo 를 통 해 RPC 호출 서비스 제공 자 를 실현 한다.
    
    <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
          <exclusions>
            <exclusion>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
          </exclusions>
        </dependency>
        <dependency>
          <groupId>zero.springboot.study</groupId>
          <artifactId>dubbo-api</artifactId>
          <version>1.0.0-SNAPSHOT</version>
        </dependency>
        <!--dubbo start-->
        <dependency>
          <groupId>org.apache.dubbo</groupId>
          <artifactId>dubbo-spring-boot-starter</artifactId>
          <version>2.7.1</version>
        </dependency>
    
        <dependency>
          <groupId>org.apache.dubbo</groupId>
          <artifactId>dubbo</artifactId>
          <version>2.7.1</version>
        </dependency>
    
        <!-- Zookeeper dependencies -->
        <dependency>
          <groupId>org.apache.dubbo</groupId>
          <artifactId>dubbo-dependencies-zookeeper</artifactId>
          <version>2.7.1</version>
          <type>pom</type>
          <exclusions>
            <exclusion>
              <artifactId>log4j</artifactId>
              <groupId>log4j</groupId>
            </exclusion>
            <exclusion>
              <artifactId>slf4j-log4j12</artifactId>
              <groupId>org.slf4j</groupId>
            </exclusion>
          </exclusions>
        </dependency>
    
        <!--dubbo end-->
    
        <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <optional>true</optional>
        </dependency>
    
      </dependencies>
    yaml 정의:
    
    server:
     # web       
     port: 9005
    spring:
     application:
      name: dubbo-comsumer
    #     
    embedded:
     zookeeper:
      port: 2181
    # dubbo   
    dubbo:
     registry:
      id: dubbo-comsumer
      address: zookeeper://127.0.0.1:${embedded.zookeeper.port}
      group: local
     application:
      name: dubbo-comsumer
      id: dubbo-comsumer
      logger: slf4j
      qosEnable: false
      qosPort: 22223
      qosAcceptForeignIp: false
     protocol:
      port: -1
      name: dubbo
     #             
     consumer:
      check: false
    서비스 소비자 호출 서비스 생산자
    
    import com.zero.api.model.User;
    import com.zero.api.provider.UserProvider;
    import org.apache.dubbo.config.annotation.Reference;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    @Service
    public class UserService {
    
      @Reference
      private UserProvider userProvider;
    
      public List<User> listUser() {
        return userProvider.listUser();
      }
    }
    우 리 는 RESTfull 인 터 페 이 스 를 통 해 전단 호출 을 제공 합 니 다.
    
    @RestController
    @RequestMapping("/users")
    public class UserController {
      @Autowired
      private UserService userService;
    
      @GetMapping
      public Object listUser() {
        List<User> list = userService.listUser();
        return list;
      }
    }
    총결산
    각종 구체 적 인 협의,등록 센터,다 중 등록 센터,시간 초과 등 설정 은 공식 문 서 를 볼 수 있 습 니 다http://dubbo.apache.org/zh-cn/docs/user/quick-start.html
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기