SpringBoot2中怎么利用Dubbo框架實現RPC服務遠程調用,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
圖例說明:
1)圖中小方塊 Protocol, Cluster, Proxy, Service, Container, Registry, Monitor 代表層或模塊,藍色的表示與業務有交互,綠色的表示只對 Dubbo 內部交互。
2)圖中背景方塊 Consumer, Provider, Registry, Monitor 代表部署邏輯拓撲節點。
3)圖中藍色虛線為初始化時調用,紅色虛線為運行時異步調用,紅色實線為運行時同步調用。
4)圖中只包含 RPC 的層,不包含 Remoting 的層,Remoting 整體都隱含在 Protocol 中。
1)Provider 暴露服務的服務提供方
2)Consumer 調用遠程服務的服務消費方(負載均衡)
3)Registry 服務注冊與發現的注冊中心(監控、心跳、踢出、重入)
4)Monitor 服務消費者和提供者在內存中累計調用次數和調用時間,主動定時每分鐘發送一次統計數據到監控中心。
5)Container 服務運行容器:遠程調用、序列化
<!-- 這里包含了Zookeeper依賴和Dubbo依賴 --> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency>
結構說明
dubbo-consume:服務消費方 dubbo-provider:服務提供方 dubbo-common:公共代碼塊,Dubbo接口,實體類
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)提供方服務接口
注意這里的注解
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); } }
該配置可以在服務提供方配置,也可以在服務消費方配置,這里演示在提供方的配置。
注解: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
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}"; } }
2)消費方調用
通過
@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() ; } }
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。