初识远程调用服务RPC(docker+zookeeper+dubbo)
1.windows本地安装zookeeper
直接而在命令行执行,从Docker Hub中获取zookeeper镜像。
docker pull zookeeper
之后直接在docker desktop for windows中直接管理组件
该可视化界面可以直接启动下载下来的文件,进行统一化管理,也能够查看日志信息
2.创建项目
创建两个项目分别为生产者和消费者
2.1 生产者(provider-ticket)
将生产者服务注册到注册中心中去。
引入依赖pom.xml
<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>
配置文件application.properties
:
dubbo.application.name=provider-ticket
dubbo.registry.address=zookeeper://localhost:2181
dubbo.scan.base-packages=com.dubbo.provider.service
创建服务相关:
注: 注解@Service并不是Spring中的注解,还是Dubbo中的注解
最后自动服务,如果报连接zk超时,应该是dubbo注册到zk的地址写错了。下面是正确启动的效果图:
2.2 消费者(consumer-user)
- 引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
- 配置文件
aplication.properties
dubbo.application.name=consumer-user
dubbo.registry.address=zookeeper://localhost:2181
- 服务消费者引用服务
@Service
public class UserService {
// 远程引用,按照全类名从注册中心寻找
@Reference
TicketService ticketService;
public void hello(){
String ticket = ticketService.getTicket();
System.out.println("买到票了:"+ticket);
}
}
注: 注解@Service
是Spring的注解,@Reference
是Dubbo的注解是要从注册中心拿取服务,这里生产者值提供接口。
- 写一个测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class ConsumerApplicationTests {
@Autowired
UserService userService;
@Test
public void contextLoads() {
userService.hello();
}
}