一、准备工作
- 确保 ZooKeeper 安装完毕,能够正常启动服务
- 本次测试分为两个项目,provider_server 和 consumer_server
- 导入 Maven 依赖,两个项目都是一样的
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.1</version>
</dependency>
<!-- SpringBoot 和 Dubbo 整合包 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.1</version>
</dependency>
<!-- curator和 zkClient 都是 ZooKeeper 的 Java 客户端 -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.2.0</version>
</dependency>
<!-- ZooKeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.10</version>
<!-- 排除这个 slf4j-log4j12 -->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
二、项目搭建
1、provider_server 项目
该项目作为生产者,向注册中心提供服务
1.1、编写配置文件
server.port=8001
# 服务应用的名称
dubbo.application.name=provider-service
# 注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 需要注册的服务,扫描包
dubbo.scan.base-packages=com.example.service
1.2、编写 service 层,将他们注册到注册中心
// zookeeper:服务注册与发现
@Service // 可以被扫描到,在项目一启动就自动注册到注册中心,该 @Service 注解是 Dubbo 下的注解
@Component // 使用了 Dubbo 后,就尽量不要使用 @Service 注解,应为会重名
public class TicketServiceImpl implements TicketService {
// 测试方法
@Override
public String getTicket() {
return "飞机票";
}
}
2、consumer_server 项目
2.1、编写配置文件
server.port=8002
#当前应用名字
dubbo.application.name=consumer-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
2.2、创建提供者一样的接口
// 本来正常步骤是需要将服务提供者的接口打包,然后用 pom 文件导入,我们这里使用简单的方式,直接将服务的接口拿过来,路径必须保证正确,即和服务提供者相同
public interface TicketService {
// 获得一张票
String getTicket();
}
2.3、编写 service 层,从注册中心取出对象
@Service // 注入 Spring 到容器中
public class UserServiceImpl implements UserService {
// 想拿到 provider-server 提供的票
@Reference // 远程引用指定的服务,他会按照全类名进行匹配,看谁给注册中心注册了这个全类名,@Reference 也是 Dubbo 下的注解
private TicketService ticketService;
public void test() {
String ticket = ticketService.getTicket();
System.out.println("从注册中心拿到一张" + ticket);
}
}
2.4、编写测试代码
@SpringBootTest
class ConsumerServerApplicationTests {
@Autowired
private UserService userService;
@Test
void contextLoads() {
userService.test();
}
}
三、最终调试
- 先启动 Zookeeper 服务
- 在运行provider_server 项目
- 最后,在 consumer_server,运行测试代码