springboot-分布式架构简单测试
1 启动zookeeper服务端
2 创建两个项目
服务提供者 : 创建一个springboot项目命名为 provider-server ,创建过程中添加web模块
服务消费者 : 创建一个springboot项目命名为 consumer-server ,创建过程中添加web模块
3 在provider-server项目中导入依赖
provider-server:pom.xml
<!--导入依赖:Dubbo + zookeeper--> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <!--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> <!--排除这个slf4j-log4j12--> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency>
4 在provider-server项目中编写一个要提供服务
新建一个service包,并在该包下,编写一个TicketService接口和对应的TicketServiceImpl实现类
provider-server:src/main/java/com/lv/service/TicketService.java
package com.lv.service; public interface TicketService { public String getTicket(); }
provider-server:src/main/java/com/lv/service/TicketServiceImpl.java
package com.lv.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 "一四三三二二三"; } }
5 编写provider-server项目的配置文件
provider-server:src/main/resources/application.properties
server.port=8001 #服务应用名字 dubbo.application.name=provider-server #注册中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 #哪些服务要被注册 dubbo.scan.base-packages=com.lv.service
6 启动provider-server项目,查看dubbo admin后台
查看dubbo admin后台参考地址:springboot-安装dubbo-admin
通过dubbo admin可以查看到服务详情
7 在consumer-server项目中导入依赖
consumer-server:pom.xml
与本篇博客第3步导入的依赖完全相同
8 编写consumer-server项目的配置文件
server.port=8002 #消费者去哪里拿服务需要暴露自己的名字 dubbo.application.name=consumer-server #注册中心的地址,可以在任何的电脑上 dubbo.registry.address=zookeeper://127.0.0.1:2181
9 在consumer-server项目中编写获取服务的类
创建一个service包,并在该包新建一个接口:这个接口要与提供服务的接口路径名完全相同,需要获取的内容也要与提供服务的接口对应
consumer-server:src/main/java/com/lv/service/TicketService.java
package com.lv.service; public interface TicketService { public String getTicket(); }
在service包再编写一个UserService,作为获取服务的类
consumer-server:src/main/java/com/lv/service/UserService.java
package com.lv.service; import org.apache.dubbo.config.annotation.Reference; import org.springframework.stereotype.Service; @Service //放到容器中 public class UserService { //想拿到provider-server提供的票,要去注册中心拿到服务 @Reference //引用,Pom坐标,可以定义路径相同的接口名 TicketService ticketService; public void buyTicket(){ String ticket = ticketService.getTicket(); System.out.println("在注册中心拿到=>"+ticket); } }
10 编写consumer-server项目的测试类
consumer-server:src/test/java/com/lv/ConsumerServerApplicationTests.java
package com.lv; import com.lv.service.UserService; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class ConsumerServerApplicationTests { @Autowired UserService userService; @Test void contextLoads() { userService.buyTicket(); } }
11 启动consumer-server测试类,查看控制台
成功实现了服务注册和发现
12 步骤总结
提供者提供服务:
- 导入依赖
- 配置注册中心的地址,以及服务发现名,和要扫描的包
- 在想要被注册的服务上面增加一个@Service注解
消费者如何消费
- 导入依赖
- 配置注册中心的地址和自己的服务名
- 从远程注入服务
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决