SpringBoot+Dubbo+zookeeper服务注册发现实战
1.利用IDEA创建一个空项目
2.创建一个模块(提供者服务):
下一步:
下一步:
下一步:
创建模块成功,一般删除 .gitignore、HELP.md、mvnw、mvnw.cmd和.mvn文件夹。使项目看起来更清爽!!
3.编写提供者服务
①创建java interface文件,名命为:TicketServer
package com.ckfuture.service;
public interface TicketServer {
public String getTicket();
}
②创建 接口实现类,名命为TicketServerImpl
package com.ckfuture.service;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
//服务注册与发现
@Service //可以被扫描到,在项目启动就自动注册到注册中心
@Component //使用了Dubbo后尽量不要用Service注解
public class TicketServerImpl implements TicketServer {
@Override
public String getTicket() {
return "<创客未来>";
}
}
③修改一下提供者服务的端口(provider-server/resources/application.properties)
server.port=8001
④导入dubbo和zookeeper的依赖,并处理日志冲突
<!-- 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>
zookeeper的jar包是zkclient
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency>
成功导入:
对于日志冲突的处理:
<!-- dubbo-spring-boot-starter--> <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>
⑤修改配置(provider-server/resources/application.properties)
server.port=8009 #服务应用名字 dubbo.application.name=provider-server #注册中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 #哪些服务要被注册 dubbo.scan.base-packages=com.ckfuture.service
⑥启动provider-server服务并在dubbo-admin中查看
4.创建一个模块(消费者服务)
①导入相关依赖
<!-- dubbo-spring-boot-starter--> <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>
②修改配置(consumer-server/resources/application.properties)
server.port=8002 #消费者去哪里获取服务,需要暴露自己的名字, # 否则注册中心不知道谁要服务 dubbo.application.name=consumer-server #注册中心的地址 dubbo.registry.address=zookeeper://127.0.0.1:2181
③创建一个UserServer.class 消费服务
package com.ckfuture.service; import org.apache.dubbo.config.annotation.Reference; import org.springframework.stereotype.Service; @Service //放到容器中 public class UserService { //想拿到provider-server提供的服务,要去注册中心拿到服务 @Reference //引用,Pom坐标,可以定义路径相同的接口名 TicketServer ticketServer; public void buyTicket(){ String ticket = ticketServer.getTicket(); System.out.println("在注册中心获取一张票:"+ticket); } }
在这里通过“Reference”获取注册中心的服务。在本地要建立提供者一样的TicketServer接口类。即“定义路径相同的接口名”,否则找不到服务提供者。
④在测试类中测试一下获取服务
package com.ckfuture; import com.ckfuture.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(); } }
如果运行消费者服务,在注册中心也可以查看到:
步骤:
前提:zookeeper服务要开启
1.提供者提供服务
1).导入依赖
2).配置注册中心的地址,以及服务发现名,和要扫描的包
3).在想要被注册的服务上面增加一个注解@Service
2.消费者如何消费
1).导入依赖
2).配置注册中心的地址,配置自己的服务名
3).从远程注入服务 @Reference
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!