在SpringBoot中使用Dubbo+Zookeeper

it2024-11-15  3

1.什么是Dubbo

​ 下载地址:https://github.com/apache/dubbo-admin/tree/master

他是Apache公司下的一款分布式框架dubbo是一款高性能、轻量级的开源Java RPC框架,他提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现;dubbo本身并不是一个服务软件,它其实就是一个jar包,能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序dubbo-admin,不过这个监控即时不装也不影响使用。

下载完之后,解压jar包:找到当前路径:target

使用cmd打开当前目录:输入mvn clean package -Dmaven.test.skip = true,进行安装打包

出现success安装成功

通过访问**localhost:7001/**可以进入到dubbo监控管理页面

2.zookeeper

下载地址:https://downloads.apache.org/zookeeper/

标题

可能会遇到的问题:在bin目录下双击zkServer.cmd会闪退

在config目录下复制一份zoo_sample.cfg文件修改一下文件名就好了

3.springboot+dubbo+zookeeper服务注册发现实战

创建一个空项目

然后创建第一哥springboot项目,添加web依赖:provider-service(服务端的提供者)

1.引入相关jar包:

<!--导入依赖: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>

2.创建service层:TicketService

package com.ddf.service; public interface TicketService { public String getTicket(); }

3.创建实现类:TicketServiceImpl

package com.ddf.service; import org.apache.dubbo.config.annotation.Service; import org.springframework.stereotype.Component; //注意这里的Service注解使用的是apache下面的,如果是spring的会扫描不到 @Service //可以被扫描到,在项目一启动就自动注册到注册中心 @Component //使用了Dubbo后尽量不要用Service注解 public class TicketServiceImpl implements TicketService { @Override public String getTicket() { return "《ddf你好啊》"; } }

4.设置端口号:application.properties

server.port=8001

5.注册中心地址:

server.port=8001 # 服务应用名字 dubbo.application.name=provider-service #注册中心 dubbo.registry.address=zookeeper://127.0.0.1:2181 #哪些服务要被注册 dubbo.scan.base-packages=com.ddf.service

创建第二个springboot项目,添加web依赖:consumer-service(客户端的消费者)

1.引入相关jar包:

<!--导入依赖: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>

2.设置端口号:

server.port=8002

3.创建service层:

UserService

package com.ddf.service; import org.apache.dubbo.config.annotation.Reference; import org.springframework.stereotype.Service; @Service //放到容器中 public class UserService { //想拿到provider-service提供的票,要去注册中心拿到服务 @Reference //引用, TicketService ticketService; public void buyTicket(){ String ticket = ticketService.getTicket(); System.out.println("在注册中心拿到=》" + ticket); } }

TicketService(注意:这个接口的路径要和provider-service项目里面的TicketService一致,要不然运行项目就会报错)

package com.ddf.service; public interface TicketService { public String getTicket(); }

4.注册中心地址:

server.port=8002 # 服务应用名字 dubbo.application.name=consumer-service #注册中心 dubbo.registry.address=zookeeper://127.0.0.1:2181

注意:如果出现了这个错误:说明7001这个端口号已经在使用了,需要关闭它

然后在运行:zookeeper里面的文件和dubbo里面的target

运行provider-service:springboot的项目访问:localhost:7001/,输入账号密码为root,进入dubbo监听管理页面,这个时候我们启动的springboot项目的服务名就可以监听到

运行consumer-service项目在测试类调用userService接口调用方法:我们就可以在另一个服务器上取到对应的数据

package com.ddf; import com.ddf.service.UserService; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class ConsumerServiceApplicationTests { @Autowired UserService userService; @Test void contextLoads() { userService.buyTicket(); } }

运行结果:

最新回复(0)