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提供者将服务发布并启动
这里测试案例是提供者发布一个获取电影票名字的服务供消费者订阅
```java
import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
@Service
@Component
public class TicketServiceImp implements TicketService {
@Override
public 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;
@Service
public class UserService {
/* 远程应用注解 @Reference 按全类名匹配*/
@Reference
TicketService ticketService;
public void hello(){
String ticket=ticketService.getTicket();
System.out.println("买到票:"+ticket);
}
}
@Test
public void contextLoads() {
userService.hello();
}