源碼地址:GitHub·點這裏 || GitEE·點這裏前端
Dubbo服務化治理的核心框架,以前幾年在國內被普遍使用,後續因爲微服務的架構的崛起,更多的公司轉向微服務下成熟的技術棧,可是Dubbo自己確實是很是優秀的框架。java
常見的應用迭代和升級的過程基本以下:node
而Dubbo框架的核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動註冊和發現。正好能夠解決上述業務發展的痛點。git
SpringCloud是一系列框架的有序集合。它利用SpringBoot的開發便利性巧妙地簡化了分佈式系統基礎設施的開發,如服務發現註冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,均可以用SpringBoot的開發風格作到一鍵啓動和部署。github
後續AliCloud微服務系列組件也不斷被使用起來,其中最基礎的組件Nacos註冊中心,更是直接支持Dubbo框架,這樣Cloud和Dubbo兩大框架就成功的整合在了一塊兒。web
Nacos註冊中心主要用於發現、配置、管理微服務。而且提供一組簡單易用的特性集,快速實現動態服務發現、服務配置、服務元數據及流量管理。spring
如上圖Nacos無縫支持一些主流的開源生態框架,例如SprinCloud,Dubbo兩大框架。在AliCloud的系列組件中,還包含了Seata,RocketMQ,Sentinel等一系列組件。數據庫
SpringCloud和Dubbo整合的結構示意圖以下,使用的Nacos中心:apache
Provider提供方:提供核心的Dubbo服務接口;架構
Consumer消費方:消費註冊的Dubbo服務接口;
Nacos註冊中心:配置、發現和管理Dubbo服務;
經過上述流程不難發現,無論從架構上看,仍是用法過程,基於核心Dubbo框架和微服務原生框架是十分類似,上述流程也遵循這樣一個規則:dubbo-server鏈接本身的業務庫DB,並經過dubbo-facade中接口向外提供服務,若是不一樣dubbo-server須要訪問其餘服務接口,也必需要經過其餘服務的facade接口操做,dubbo-client做爲接口服務消費端,能夠經過facade接口訪問不少業務模塊的服務,總體架構層次十分明瞭。
案例結構
包含三個模塊:server、facade、client。
核心依賴
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId> <version>2.1.1.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.1.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.1.1.RELEASE</version> </dependency>
配置文件
主要是Nacos註冊中心和Dubbo兩個核心配置。
server: port: 9010 spring: application: name: node10-dubbo-server cloud: nacos: discovery: server-addr: http://localhost:8848 config: server-addr: http://localhost:8848 file-extension: yaml # Dubbo服務配置 dubbo: scan: base-packages: com.cloud.dubbo.service protocol: name: dubbo port: -1 registry: address: spring-cloud://localhost
服務接口實現
這裏DubboService即dubbo-facade包中對外提供的接口。
import org.apache.dubbo.config.annotation.Service; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @Service public class DubboServiceImpl implements DubboService { private static final Logger LOGGER = LoggerFactory.getLogger(DubboServiceImpl.class) ; @Override public String getInfo() { LOGGER.info("node10-dubbo-server start ..."); return "node10-dubbo-server"; } }
注意:@Service是Dubbo框架中的註解,不是Spring框架的註解。
配置文件
主要配置是連接Nacos註冊中心,訂閱註冊中心的node10-dubbo-server服務。
server: port: 9011 spring: application: name: node10-dubbo-client cloud: nacos: discovery: server-addr: http://localhost:8848 config: server-addr: http://localhost:8848 # Dubbo服務配置 dubbo: protocol: name: dubbo port: -1 registry: address: spring-cloud://localhost cloud: subscribed-services: node10-dubbo-server
Dubbo接口調用
一樣,這裏DubboService即dubbo-facade包中對外提供的接口。
import com.cloud.dubbo.service.DubboService; import org.apache.dubbo.config.annotation.Reference; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class DubboWeb { @Reference private DubboService dubboService ; @GetMapping("/getInfo") public String getInfo () { return dubboService.getInfo() ; } }
注意:@Reference也是Dubbo框架中的註解。
如上流程開發完成,前後啓動dubbo-server服務和dubbo-client服務,查看註冊中心服務列表:
經過上述getInfo接口請求測試,便可看到完整的案例效果。
不多有選擇SpringCloud+Dubbo框架的架構模式,這裏簡單說明一下爲什麼,由於這兩個框架都是至關複雜的,學習成本是一個方面,風險是最主要緣由,這兩個框架同時使用,就意味要面對和解決兩個框架下產生的問題,在任何一個框架均可以穩定的解決業務問題時,徹底不必花裏胡哨。
GitHub地址:知了一笑 https://github.com/cicadasmile/spring-cloud-base GitEE地址:知了一笑 https://gitee.com/cicadasmile/spring-cloud-base
推薦閱讀:微服務組件和應用