1.介绍
在分布式系统中,国内常用zookeeper+ dubbo组合,而Spring Boot推荐使用
全栈的Spring, Spring Boot+ Spring Cloud。
2.相关概念
zookeeper用来做注册中心(类比婚介所),dubbo用来做分布式服务的调用框架。
工作原理图:
3.docker安装zookeeper
docker pull zookeeper
4.启动zookeeper
docker run --name zk01 -p 2181:2181 --restart always -d 56d414270ae3
5.springboot整合zookeeper和dubbo
5.1提供者端
5.1.1引入相关依赖
引入dubbo的
<dependency><groupId>com.alibaba.boot</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>0.1.0</version></dependency>
引入zookeeper的
<!--引入zookeeper的客户端工具--><!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient --><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version></dependency>
5.1.2编写配置文件
配置dubbo的扫描包和注册中心地址 ```shell
配置应用名(当前应用)
dubbo.application.name=provider
设置注册地址
dubbo.registry.address=zookeeper://120.78.152.93:2181
发布哪些服务(配置扫描包)
dubbo.scan.base-packages=com.jf3q.provider.service
<a name="CjsGX"></a>### 5.1.3提供者将服务发布并启动这里测试案例是提供者发布一个获取电影票名字的服务供消费者订阅```javaimport com.alibaba.dubbo.config.annotation.Service;import org.springframework.stereotype.Component;@Service@Componentpublic class TicketServiceImp implements TicketService {@Overridepublic String getTicket() {return "《长津湖》";}}
5.2消费者端
5.2.1引入相关依赖
<dependency><groupId>com.alibaba.boot</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>0.1.0</version></dependency><!--引入zookeeper的客户端工具--><!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient --><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version></dependency>
5.2.2编写配置文件
dubbo.application.name=consumer#设置注册地址dubbo.registry.address=zookeeper://120.78.152.93:2181
5.2.3将服务提供者的包复制进来
这里要特别注意:必须把服务提供者端暴露的包整个复制过来,而且要保证全类名相同

5.2.4测试
import com.alibaba.dubbo.config.annotation.Reference;import com.jf3q.provider.service.TicketService;import org.springframework.stereotype.Service;@Servicepublic class UserService {/* 远程应用注解 @Reference 按全类名匹配*/@ReferenceTicketService ticketService;public void hello(){String ticket=ticketService.getTicket();System.out.println("买到票:"+ticket);}}
@Testpublic void contextLoads() {userService.hello();}
