lzj:SpringBoot之Dubbo和Zookeeper

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的端口修改为20881

    server.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.properties

    server.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)] 测试访问成功!

    相关推荐

    相关文章