lzj:SpringBoot之Dubbo和Zookeeper 2024-04-03 01:26:43 0 0 Dubbo和Zookeeper Window下安装zookeeper 注册中心 下载zookeeper,官网地址:https://zookeeper.apache.org/ 我选择下载的是apache-zookeeper-3.5.9-bin.tar.gz 步骤: 打开下载的文件(管理员模式打开),运行/bin/zkServer.cmd,初次运行时可能会报错,因为没有zoo.cfg 也有可能遇到闪退的问题! 闪退的解决方案:右键编辑zkServer.cmd文件,在末尾添加pauser(如果右键不能点击编辑,可以将文件的后缀名改为txt,然后修改完后再改回cmd) 修改zoo.cfg配置文件 将conf文件夹下面的zoo_sample.cfg复制一份改名为zoo.cfg即可。 注意几个重要位置: dataDir=./ 临时数据存储的目录(可写相对路径) clientPort=2181 zookeeper的端口号 修改完成后再次启动zookeeper 打开zkCli.cmd进行测试(在打开zkCli.cmd前,要先将zkServer.cmd打开) ls /:列出zookeeper根下保存的所有节点 create –e /lzj123:创建一个lzj节点,值为123 get /lzj:获取/lzj节点的值 Window下安装Dubbo-admin 注意:dubbo-admin可能会使用20880端口,所以在编写生产者的时候要修改生产者的dubbo的端口号 是一个监控管理后台,查看我们注册了哪些服务,哪些服务被消费了 dubbo本身并不是一个服务软件。它其实就是一个jar包,能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。 但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序dubbo-admin,不过这个监控即使不装也不影响使用。 安装步骤: 下载dubbo-admin https://github.com/apache/dubbo-admin 左侧选择master后在code中下载zip 进入解压后的目录,进入dubbo-admin-serversrcmain esources 该目录下有一个application.properties,双击打开该文件 由于dubbo-admin后台服务端口默认为8080,可能会与tomcat的端口产生冲突,所以我们需要在application.properties中修改默认端口 修改方法:在文件末尾加入server.port=7001,即将其默认端口修改为7001 其它需要修改的可以参考如下:(我的话是只修改了端口号就可以了)server.port=7001spring.velocity.cache=falsespring.velocity.charset=UTF-8spring.velocity.layout-url=/templates/default.vmspring.messages.fallback-to-system-locale=falsespring.messages.basename=i18n/messagespring.root.password=rootspring.guest.password=guestdubbo.registry.address=zookeeper://127.0.0.1:2181 项目目录下cmd中打包dubbo-admin(第一次打包过程可能有点慢)mvn clean package -Dmaven.test.skip=true 打包完成后,会生成如图的jar包,可能不是这个名字 进入dubbo-admin-distribution arget下可以找到这个jar包(应该就在这个位置,如果不在这个位置,可以去其它文件夹的target目录下找一找) 执行 dubbo-admin-distribution arget 下的dubbo-admin-0.3.0.jar(前提:zookeeper的服务一定要打开,即运行zkServer.cmd) 打开cmd在该路径下运行:java -jar dubbo-admin-0.3.0.jar 执行完毕,我们去访问一下http://localhost:7001/,这时候我们需要输入登录账户和密码,我们都是默认的root,如果需要修改的话,可以在第二步的properties中修改,然后重新打包 SpringBoot + Dubbo + zookeeper 框架搭建 创建一个springboot项目,项目名:provider-server,选择web依赖即可 在项目中编写一个服务 创建一个service包 编写接口public interface TicketService { public String getTicket();} 编写实现类@Service//可以被扫描到,在项目启动就自动注册到注册中心,一定要注意,这个是dubbo包里的@Component//这里不使用@Service是为了方便区分dubbo和spring包下的@Servicepublic class TicketServiceImpl implements TicketService{ @Override public String getTicket() { return "LZJ学习java"; }} 再创建一个模块,实现服务消费者,模块名:consumer-server 在consumer-server项目下写一个需要获得的服务public class UserService { //我们需要去拿去注册中心的服务} 需求:现在我们的用户想使用买票的服务,这要怎么弄呢 ? 服务提供者 编写provider-server项目 服务提供者注册到注册中心,我们需要整合Dubbo和zookeeper,所以需要导包<!-- dubbo --><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> <!-- curator版本建议先用我这个,全部测试成功后再尝试升版本,否则可能报错 curator的版本会跟dubbo-stater依赖版本有关--> <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> <!-- 这个zookeeper的版本要跟你本地下载的一致 --> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.5.9</version> <!--排除这个slf4j-log4j12--> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions></dependency> 在application.properties文件中配置属性 dubbo-admin可能会占用dubbo默认的20880端口,所以这里我们将dubbo的端口修改为20881server.port=8001#dubbo.protocol.port=20881# 服务应用名字dubbo.application.name=provider-server# 注册中心地址dubbo.registry.address=zookeeper://127.0.0.1:2181# 哪些服务要被注册dubbo.scan.base-packages=com.lzj.service# 修改dubbo默认端口号dubbo.protocol.port=20881 测试 逻辑理解 :应用启动起来,dubbo就会扫描指定的包下带有@component注解的服务,将它发布在指定的注册中心中! **注意:**在idea中启动项目时一定要先启动zookeeper和dubbo-admin生成的jar包,如果没有启动dubbo-admin,则无法在网页上访问7001端口进入可视化界面 显示出来你的服务则配置成功 服务消费者 编写consumer-server项目 导入依赖,和之前一样<!-- dubbo --><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> <!-- curator版本建议先用我这个,全部测试成功后再尝试升版本,否则可能报错 curator的版本会跟dubbo-stater依赖版本有关--> <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> <!-- 这个zookeeper的版本要跟你本地下载的一致 --> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.5.9</version> <!--排除这个slf4j-log4j12--> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions></dependency> 编写application.propertiesserver.port=8002# 消费者去哪里拿服务需要暴露自己的名字dubbo.application.name=consumer-server# 注册中心的地址dubbo.registry.address=zookeeper://127.0.0.1:2181 本来正常步骤是需要将服务提供者的接口打包,然后用pom文件导入,我们这里使用简单的方式,直接将服务的接口拿过来,路径必须保证正确,即和服务提供者相同 完善消费者的服务类@Service//放到容器中public class UserService { //想拿到provider-server中的票 @Reference//引用, Pom坐标,可以定义路径相同的接口 TicketService ticketService; public void buyTicket(){ String ticket = ticketService.getTicket(); System.out.println("在注册中心拿到=>"+ticket); }} 编写测试类@SpringBootTestclass ConsumerServerApplicationTests { @Autowired UserService userService; @Test void contextLoads() { userService.buyTicket(); }} 启动测试 开启zookeeper 开启dubbo-admin【可以不用做】 开启服务者(provider-server) 消费者消费测试 class ConsumerServerApplicationTests {@Autowired UserService userService; @Test void contextLoads() { userService.buyTicket(); } }6. 启动测试1. 开启zookeeper2. 开启dubbo-admin【可以不用做】3. 开启服务者(provider-server)4. 消费者消费测试 [外链图片转存中...(img-ei5TC7zc-1647410955147)] 测试访问成功! 收藏(0)