SpringBoot整合Dubbo框架,實現RPC服務遠程調用
圖例說明: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、項目結構說明
結構說明
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: 5000msspring: 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: 5000msspring: 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@Componentpublic 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@Servicepublic 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)@Componentpublic class DubboServiceImpl implements DubboService {}
2)消費方調用
@Override public String timeOut(Integer time) { return dubboService.timeOut(time); }
3)測試接口
服務超時拋出異常
com.alibaba.dubbo.remoting.TimeoutException3、接口多版本配置
1)服務提供方
相同接口提供兩個版本實現。注解:version。版本一:
@Service(version = '1.0.0')@Componentpublic class VersionOneImpl implements VersionService { @Override public String getVersion() {return '{當前版本:1.0.0}'; }}
版本二:
@Service(version = '2.0.0')@Componentpublic class VersionTwoImpl implements VersionService { @Override public String getVersion() {return '{當前版本:2.0.0}'; }}
2)消費方調用
通過@Reference(version)注解,將指向不同版本的接口實現。
@Servicepublic 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
以上就是SpringBoot整合Dubbo框架,實現RPC服務遠程調用的詳細內容,更多關于SpringBoot整合Dubbo框架的資料請關注好吧啦網其它相關文章!