SpringBoot2中怎么利用Dubbo框架實(shí)現(xiàn)RPC服務(wù)遠(yuǎn)程調(diào)用,很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)建站是網(wǎng)站建設(shè)技術(shù)企業(yè),為成都企業(yè)提供專業(yè)的做網(wǎng)站、網(wǎng)站建設(shè),網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制適合企業(yè)的網(wǎng)站。十余年品質(zhì),值得信賴!
圖例說明:
1)圖中小方塊 Protocol, Cluster, Proxy, Service, Container, Registry, Monitor 代表層或模塊,藍(lán)色的表示與業(yè)務(wù)有交互,綠色的表示只對 Dubbo 內(nèi)部交互。
2)圖中背景方塊 Consumer, Provider, Registry, Monitor 代表部署邏輯拓?fù)涔?jié)點(diǎn)。
3)圖中藍(lán)色虛線為初始化時(shí)調(diào)用,紅色虛線為運(yùn)行時(shí)異步調(diào)用,紅色實(shí)線為運(yùn)行時(shí)同步調(diào)用。
4)圖中只包含 RPC 的層,不包含 Remoting 的層,Remoting 整體都隱含在 Protocol 中。
1)Provider 暴露服務(wù)的服務(wù)提供方
2)Consumer 調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方(負(fù)載均衡)
3)Registry 服務(wù)注冊與發(fā)現(xiàn)的注冊中心(監(jiān)控、心跳、踢出、重入)
4)Monitor 服務(wù)消費(fèi)者和提供者在內(nèi)存中累計(jì)調(diào)用次數(shù)和調(diào)用時(shí)間,主動(dòng)定時(shí)每分鐘發(fā)送一次統(tǒng)計(jì)數(shù)據(jù)到監(jiān)控中心。
5)Container 服務(wù)運(yùn)行容器:遠(yuǎn)程調(diào)用、序列化
com.alibaba.boot dubbo-spring-boot-starter 0.2.0
結(jié)構(gòu)說明
dubbo-consume:服務(wù)消費(fèi)方 dubbo-provider:服務(wù)提供方 dubbo-common:公共代碼塊,Dubbo接口,實(shí)體類
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)消費(fèi)方配置
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)提供方服務(wù)接口
注意這里的注解
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("字符參數(shù):{}",param); return "[Hello,Cicada]"; } @Override public UserEntity getUserInfo(UserEntity userEntity) { LOGGER.info("實(shí)體類參數(shù):{}",userEntity); return userEntity; } }
2)消費(fèi)方接口
注意這里注解
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); } }
該配置可以在服務(wù)提供方配置,也可以在服務(wù)消費(fèi)方配置,這里演示在提供方的配置。
注解:timeout
1)服務(wù)接口注解
@Service(timeout = 2000) @Component public class DubboServiceImpl implements DubboService { }
2)消費(fèi)方調(diào)用
@Override public String timeOut(Integer time) { return dubboService.timeOut(time); }
3)測試接口
服務(wù)超時(shí)拋出異常
com.alibaba.dubbo.remoting.TimeoutException
1)服務(wù)提供方
相同接口提供兩個(gè)版本實(shí)現(xiàn)。注解:version。
版本一:
@Service(version = "1.0.0") @Component public class VersionOneImpl implements VersionService { @Override public String getVersion() { return "{當(dāng)前版本:1.0.0}"; } }
版本二:
@Service(version = "2.0.0") @Component public class VersionTwoImpl implements VersionService { @Override public String getVersion() { return "{當(dāng)前版本:2.0.0}"; } }
2)消費(fèi)方調(diào)用
通過
@Reference(version)注解,將指向不同版本的接口實(shí)現(xiàn)。
@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() ; } }
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。