Dubbo 和 zookeeper
zookeeper下载地址:http://archive.apache.org/dist/zookeeper/
dubbo-admin下载地址:https://github.com/apache/dubbo-admin
安装:略
-
创建一个空项目
- dubbo + zookeeper
-
在空项目中再创建两个 module
-
provider-server
TicketService
package com.cheng.service; public interface TicketService { public String getTicket(); }
TicketServiceImpl
public class TicketServiceImpl implements TicketService { @Override public String getTicket() { return "这是 provide-server 的票(~o ̄3 ̄)~"; } }
-
consumer-server
TicketService
package com.cheng.service; public interface TicketService { public String getTicket(); }
UserService
@Service public class UserService { }
-
-
导入 dubbo + zookeeper 的 jar 包
provider-server 和 consumer-server 导入的包是一样的
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!--日志会冲突--> <!--引入zookeeper--> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.14</version> </dependency> <!--排除这个slf4j-log4j12--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>2.0.0-alpha1</version> </dependency>
-
提供者提供服务
-
配置注册中心的地址,以及服务发现名,和要扫描的包
application.properties
server.port=8001 # 服务应用名字 dubbo.application.name=provider-server # 注册中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 # 哪些服务要被注册 dubbo.scan.base-packages=com.cheng.service
-
在想要被注册的服务上面增加一个注解 @Service
注:这里的 Service 是 dubbo 包下的
package com.cheng.service; import org.apache.dubbo.config.annotation.Service; import org.springframework.stereotype.Component; // zookeeper:服务注册与发现 @Service // 可以被扫描到,在项目一启动就自动注册到注册中心 @Component // 使用了 Dubbo 后尽量不要用 Service 注解 public class TicketServiceImpl implements TicketService { @Override public String getTicket() { return "这是 provide-server 的票(~o ̄3 ̄)~"; } }
-
启动 zookeeper 的 bin 目录下的 zkServer.cmd 文件
-
启动 dubbo-admin-0.0.1-SNAPSHOT.jar 包
-
启动 provider-server 项目,登录 localhost:7001/ ,在提供者选项中查看是否已经注册成功
-
-
消费者如何消费
-
配置注册中心的地址,配置自己的服务名
application.properties
server.port=8002 # 消费者去哪里拿服务需要暴露自己的名字 dubbo.application.name=consumer-server # 注册中心的地址 dubbo.registry.address=zookeeper://127.0.0.1:2181
-
从远程注入服务
注:这里的 @service 是 springframework 包下的
package com.cheng.service; import org.apache.dubbo.config.annotation.Reference; import org.springframework.stereotype.Service; @Service public class UserService { // 想拿到 provider 提供的票,要去注册中心拿到服务 @Reference TicketService ticketService; public void buyTicket() { String ticket = ticketService.getTicket(); System.out.println("在注册中心拿到 ==> " + ticket); } }
-
-
测试是否从服务中心取到想要的信息
@SpringBootTest class ConsumerServerApplicationTests { @Autowired UserService userService; @Test void contextLoads() { userService.buyTicket(); } }
测试结果:
获取到如下信息👇
在注册中心拿到 ==> 这是 provide-server 的票(~o ̄3 ̄)~
测试成功!