在分佈式系統中, 國內經常使用zookeeper+dubbo組合,而Spring Boot推薦使用全棧的Spring,Spring Boot,Spring Cloud。 linux
分佈式系統:git
一.Zookeeper和Dubbo概覽github
1.1 ZooKeeperspring
ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務。它是一個爲分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。docker
1.2 Dubbo架構
Dubbo是Alibaba開源的分佈式服務框架,它最大的特色是按照分層的方式來架構,使用這種方式能夠使各個層之間解耦合(或者最大限度地鬆耦合)。從服務模型角度來看,Dubbo採用的是一種很是簡單的模型,要麼是提供方提供服務,要麼是消費方消費服務,因此基於這一點能夠抽象出服務提供方(Provider)和服務消費方(Consumer)兩個角色。app
Dubbo體系結構:框架
二.Zookeeper的安裝與啓動分佈式
在linux虛擬機上用docker安裝zookeeper:ide
docker pull registry.docker-cn.com/library/zookeeper
docker啓動zookeeper並進行端口映射:
docker run --name some-zookeeper -p 2181:2181 --restart always -d zookeeper
三.整合Dubbo
建立兩個項目,一個項目做爲服務提供者,一個項目做爲服務消費者。
3.1 服務提供者註冊到註冊中心
3.1.1 引入dubbo和zkclient的相關依賴: <!--1.引入dubbo-spring-boot-starter-->
<dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.1.0</version> </dependency> <!--2.引入zookeeper的客戶端工具--> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency>
3.1.2 配置dubbo的掃描包和註冊中心地址:
dubbo.application.name=provider-ticket
dubbo.registry.address=zookeeper://***.**.**.**:2181
dubbo.scan.base-packages=com.wang.ticket.service
3.1.3 開啓dubbo的註解:
@EnableDubbo //開啓dubbo註解 @SpringBootApplication public class ProviderTicketApplication { public static void main(String[] args) { SpringApplication.run(ProviderTicketApplication.class, args); } }
3.1.4 使用@Service(com.alibaba.dubbo.config.annotation.Service)發佈服務:
先編寫Service接口:
package com.wang.ticket.service; public interface TicketService { String getTicket(); }
實現接口:
@Component @Service //注意這邊是com.alibaba.dubbo.config.annotation.Service //主要做用是將服務發佈出去 public class TicketServiceImpl implements TicketService { @Override public String getTicket() { return "《毒液:致命守護者》"; } }
完成上訴步驟後啓動該服務項目,保持運行狀態,以便消費者使用。
3.2 服務消費者消費服務
3.2.1 在消費者項目的pom文件中引入dubbo和zkclient
<!--1.引入dubbo-spring-boot-starter--> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.1.0</version> </dependency> <!--2.引入zookeeper的客戶端工具--> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency>
3.2.2 建立服務發佈的service接口,要求全類名與發佈的徹底相同
package com.wang.ticket.service; public interface TicketService { String getTicket(); }
3.2.3 配置註冊中心地址
dubbo.application.name=consumer-user dubbo.registry.address=zookeeper://172.16.80.34:2181
3.2.4 消費註冊中心服務
@Service //org.springframework.stereotype.Service public class UserService { @Reference //引入註冊中心的服務,按照全類名匹配,在註冊中心找到對應的服務 TicketService ticketService; public void hello(){ String ticket = ticketService.getTicket(); System.out.println(ticket); } }
3.2.5 測試
測試只須要注入UserService,並調用該方法,若能成功調用說明dubbo服務以及調用成功了