天天看點

SpringBoot2 整合 Dubbo架構 ,實作RPC服務遠端調用一、Dubbo架構簡介二、與SpringBoot2.0整合三、示範案例四、源代碼位址

一、Dubbo架構簡介

1、架構依賴

SpringBoot2 整合 Dubbo架構 ,實作RPC服務遠端調用一、Dubbo架構簡介二、與SpringBoot2.0整合三、示範案例四、源代碼位址

圖例說明:

1)圖中小方塊 Protocol, Cluster, Proxy, Service, Container, Registry, Monitor 代表層或子產品,藍色的表示與業務有互動,綠色的表示隻對 Dubbo 内部互動。

2)圖中背景方塊 Consumer, Provider, Registry, Monitor 代表部署邏輯拓撲節點。

3)圖中藍色虛線為初始化時調用,紅色虛線為運作時異步調用,紅色實線為運作時同步調用。

4)圖中隻包含 RPC 的層,不包含 Remoting 的層,Remoting 整體都隐含在 Protocol 中。

2、核心角色說明

1)Provider 暴露服務的服務提供方

2)Consumer 調用遠端服務的服務消費方(負載均衡)

3)Registry 服務注冊與發現的注冊中心(監控、心跳、踢出、重入)

4)Monitor 服務消費者和提供者在記憶體中累計調用次數和調用時間,主動定時每分鐘發送一次統計資料到監控中心。

5)Container 服務運作容器:遠端調用、序列化

二、與SpringBoot2.0整合

1、核心依賴

<!-- 這裡包含了Zookeeper依賴和Dubbo依賴 -->
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.2.0</version>
</dependency>           

2、項目結構說明

SpringBoot2 整合 Dubbo架構 ,實作RPC服務遠端調用一、Dubbo架構簡介二、與SpringBoot2.0整合三、示範案例四、源代碼位址

結構說明

dubbo-consume:服務消費方
dubbo-provider:服務提供方
dubbo-common:公共代碼塊,Dubbo接口,實體類           

3、核心配置

1)提供方配置

server:
  tomcat:
    uri-encoding: UTF-8
    max-threads: 1000
    min-spare-threads: 30
  port: 7007
  connection-timeout: 5000ms
spring:
  application:
    name: block-dubbo-provider
# Dubbo 配置檔案
dubbo:
  application:
    name: block-dubbo-provider
  registry:
    address: 127.0.0.1:2181
    protocol: zookeeper
  protocol:
    name: dubbo
    port: 20880
  scan:
    base-packages: com.boot.consume           

2)消費方配置

server:
  tomcat:
    uri-encoding: UTF-8
    max-threads: 1000
    min-spare-threads: 30
  port: 7008
  connection-timeout: 5000ms

spring:
  application:
    name: block-dubbo-consume
# Dubbo 配置檔案
dubbo:
  application:
    name: block-dubbo-consume
  registry:
    address: 127.0.0.1:2181
    protocol: zookeeper           

三、示範案例

1、服務遠端調用

1)提供方服務接口

  • 注意這裡的注解
  • com.alibaba.dubbo.config.annotation.Service
@Service
@Component
public class DubboServiceImpl implements DubboService {
    private static Logger LOGGER = LoggerFactory.getLogger(DubboServiceImpl.class) ;
    @Override
    public String getInfo(String param) {
        LOGGER.info("字元參數:{}",param);
        return "[Hello,Cicada]";
    }
    @Override
    public UserEntity getUserInfo(UserEntity userEntity) {
        LOGGER.info("實體類參數:{}",userEntity);
        return userEntity;
    }
}           

2)消費方接口

  • 注意這裡注解
  • com.alibaba.dubbo.config.annotation.Reference
  • org.springframework.stereotype.Service
@Service
public class ConsumeService implements DubboService {
    @Reference
    private DubboService dubboService ;
    @Override
    public String getInfo(String param) {
        return dubboService.getInfo(param);
    }
    @Override
    public UserEntity getUserInfo(UserEntity userEntity) {
        return dubboService.getUserInfo(userEntity);
    }
}           

2、接口逾時配置

該配置可以在服務提供方配置,也可以在服務消費方配置,這裡示範在提供方的配置。

注解:timeout

1)服務接口注解

@Service(timeout = 2000)
@Component
public class DubboServiceImpl implements DubboService {
}           

2)消費方調用

@Override
 public String timeOut(Integer time) {
     return dubboService.timeOut(time);
 }           

3)測試接口

服務逾時抛出異常

com.alibaba.dubbo.remoting.TimeoutException           

3、接口多版本配置

1)服務提供方

相同接口提供兩個版本實作。注解:version。

版本一:

@Service(version = "1.0.0")
@Component
public class VersionOneImpl implements VersionService {
    @Override
    public String getVersion() {
        return "{目前版本:1.0.0}";
    }
}           

版本二:

@Service(version = "2.0.0")
@Component
public class VersionTwoImpl implements VersionService {
    @Override
    public String getVersion() {
        return "{目前版本:2.0.0}";
    }
}           

通過@Reference(version)注解,将指向不同版本的接口實作。

@Service
public class VersionServiceImpl implements VersionService {
    @Reference(version = "1.0.0")
    private VersionService versionService1 ;
    @Reference(version = "2.0.0")
    private VersionService versionService2 ;
    @Override
    public String getVersion() {
        return versionService1.getVersion();
    }
    public String version2 (){
        return versionService2.getVersion() ;
    }
}           

以上案例都是參照Dubbo官網的流程編寫的,Dubbo許多強大功能都可以參考官網一步步的配置。

四、源代碼位址

GitHub位址:知了一笑
https://github.com/cicadasmile/middle-ware-parent
碼雲位址:知了一笑
https://gitee.com/cicadasmile/middle-ware-parent