欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

从零开始搭建zookeeper+dubboAdmin+dubbo遇到的情况

时间:2023-04-22
文章目录

前言下载zookeeper

解压修改配置文件启动zookeeper下载dubboAdmin解压dubbo-admin-develop.zip修改配置mvn打包启动dubbo-admin服务器登录dubbo-admin 使用dubbo

简单构建负载均衡 前言

博主使用了虚拟机搭建了zookeeper集群,但是dubboAdmin在宿主机运行,无法连接到虚拟机里面的zookeeper集群,配置了防火墙也没用,但在宿主机上搭建zookeeper服务器,可以秒连接,可能是由于dubboAdmin设置了连接超时,如果dubboAdmin无法连接zookeeper就无法启动,所以这里是在window环境下使用zookeeper,如果想看linux如何搭建zookeeper集群可以看我这篇文章 Linux 从零开始部署zookeeper集群遇到的问题

下载zookeeper

在浏览器运行如下地址就可以下载apache-zookeeper-3.7.0-bin.tar.gz包了
https://dlcdn.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz

解压

下载后就是解压了,windows解压使用专门的解压软件即可如WinRAR,解压后得到如下文件夹

修改配置文件

将conf文件夹下的zoo_sample.cfg名称修改为zoo.cfg,并修改其内容,将dataDir改为如下,其他就无须改变了

dataDir=E:apache-zookeeper-3.7.0-bindata

启动zookeeper

最好下个git,这样右键后就有git bush命令行工具了,如果没有下载使用window命令行也可以,window键+R出现运行,然后输入cmd回车,如下

cd E:apache-zookeeper-3.7.0-bincd bin./zkServer.cmd

出现如下情况,则启动成功

下载dubboAdmin

进入网址https://gitcode.net/mirrors/apache/dubbo-admin,点克隆下载zip文件,得到dubbo-admin-develop.zip,这是新版的dubboAdmin,老版本的dubboAdmin打包成war需要部署在tomcat服务器中,然后我试过很多版本的tomcat都无法配置成功

解压dubbo-admin-develop.zip

得到如下文件夹

修改配置

打开如下路径dubbo-admin-developdubbo-admin-serversrcmainresources下的application.properties,修改其配置,修改端口即可,其他不用变,因为windows下的zookeeper会占用8080端口,而dubbo-admin-develop默认启动端口为8080,下面就是zookeeper服务器的地址,如果是虚拟机将127.0.0.1改为虚拟机中运行ifconfig显示的ip地址,但是很有可能连接不上

mvn打包

使用mvn必须安装maven并配置好mvn环境变量,使用dubbo必须有jdk,在dubbo-admin-develop目录下运行mvn package -Dmaven.test.skip=true,打包的时候可能会出现问题,因为需要安装node,此时会卡住,但是没关系,解决方法就是关闭命令行,重新运行如下命令打包即可

mvn package -Dmaven.test.skip=true


打包成功出现如下信息

启动dubbo-admin服务器

将命令行移动到dubbo-admin-developdubbo-admin-servertarget目录下,执行如下代码,注意dubbo-admin-server-0.4.0.jar名称以你自己的电脑上名字为准,因为以后可能版本不同

java -jar dubbo-admin-server-0.4.0.jar

出现如下信息,且没有报错则启动成功

登录dubbo-admin

输入http://localhost:8081/就会默认跳转到登录界面,默认登录的账户是root密码是root,如果不对则在dubbo-admin-developdubbo-admin-serversrcmainresources下的application.properties这个配置文件查看,如下配置就是决定账号和密码


登录成功出现如下界面,表示dubboAdmin启动成功

使用dubbo 简单构建

按照如下目录结构创建,且只有6个文件有内容,在下面会一一列出

pmx.xml

<?xml version="1.0" encoding="UTF-8"?> 4.0.0 com.lolxxs springboot_dubbo 1.0-SNAPSHOT org.springframework.boot spring-boot-starter-parent 2.4.1 org.springframework.boot spring-boot-starter-web io.dubbo.springboot spring-boot-starter-dubbo 1.0.0 com.101tec zkclient 0.7

DubboApplication.java

package com.lolxxs;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class DubboApplication { public static void main(String[] args) { SpringApplication.run(DubboApplication.class); }}

TestService.java

package com.lolxxs.service;public interface TestService { String testDubbo();}

TestService.java

package com.lolxxs.service.impl;import com.alibaba.dubbo.config.annotation.Service;import com.alibaba.dubbo.rpc.RpcContext;import com.lolxxs.service.TestService;@Service(version = "1.0.0", timeout = 3000)public class TestServiceImpl implements TestService { @Override public String testDubbo() { System.out.println("调用了"); return "远程地址"+ RpcContext.getContext().getRemoteAddress()+" 本地地址"+ RpcContext.getContext().getLocalAddress(); }}

TestController.java

package com.lolxxs.controller;import com.alibaba.dubbo.config.annotation.Reference;import com.alibaba.dubbo.rpc.RpcContext;import com.lolxxs.service.TestService;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/consumer")public class TestController { @Reference(version = "1.0.0", timeout = 300) private TestService testService; @GetMapping("/test") public String getTest() { return testService.testDubbo(); }}

application.yml

server: port: 9000spring: dubbo: application: name: springboot-dubbo-demo registry: address: zookeeper://127.0.0.1 port: 2181 protocol: name: dubbo port: 20890 scan: com.lolxxs.service

创建好直接运行DubboApplication类

出现如下信息说明启动了dubbo服务,并且dubbo服务成功连接zookeeper


点击搜索,会发现多出了一个,就是我们刚刚创建的服务,也就是服务器的提供者

点击最后一个详情,出现如下,说明只有一个dubbo服务

我们启动好了服务提供者(生产者),也就要启动服务消费者,只需要改动配置文件后application.yml,再次点击DubboApplication类中的按钮启动即可,注意之前的服务器不能关闭,idea可以启动多个服务器,eclipse我以前用过好像没法启动多个服务器,配置文件修改端口和包扫描scan改为扫描controller包
application.yml

server: port: 9002spring: dubbo: application: name: springboot-dubbo-consumer registry: address: zookeeper://127.0.0.1 port: 2181 protocol: name: dubbo port: 20890 scan: com.lolxxs.controller

启动成功后,有两种方法测试,一种是直接在浏览器输入http://localhost:9002/consumer/test,第二种就是使用postman,在postman输入http://localhost:9002/consumer/test,使用get请求,这里为了简单使用浏览器输入,如下,可以看到收到响应

并且可以看到,第一个服务器是服务器提供者,第二个服务器是服务器消费者,我们访问的是服务器消费者,但是却是服务器提供者执行的代码,这就是RPC(Remote Procedure Call)

负载均衡

观察负载均衡我们需要启动两个服务器提供者,修改配置文件即可,两个服务提供者的端口不能相同,并且protocol下面的端口也不能相同,服务消费者和上面配置一模一样。注意两个服务提供者的application.name必须相同,要不然它们就是两种服务了,不是一种服务的两个服务器提供者

服务提供者1
application.yml

server: port: 9000spring: dubbo: application: name: springboot-dubbo-demo registry: address: zookeeper://127.0.0.1 port: 2181 protocol: name: dubbo port: 20890 scan: com.lolxxs.service

服务提供者2
application.yml

server: port: 9001spring: dubbo: application: name: springboot-dubbo-demo registry: address: zookeeper://127.0.0.1 port: 2181 protocol: name: dubbo port: 20891 scan: com.lolxxs.service

服务消费者
application.yml

server: port: 9002spring: dubbo: application: name: springboot-dubbo-consumer registry: address: zookeeper://127.0.0.1 port: 2181 protocol: name: dubbo port: 20890 scan: com.lolxxs.controller

然后依次启动三个服务器,查看dubboAdmin,可以发现消费者和服务提供者都注册成功了

点击服务提供者的详情,可以发现该服务现在有两个提供者了,所以就可以使用负载均衡策略了

在浏览器多次输入http://localhost:9002/consumer/test,会发现请求同一个地址,访问的服务器可能不同,本地地址不同,也就是我们上面配置的dubbo暴露端口


查看idea中服务器运行情况,也可以发现两个服务提供者服务器都运行了,且运行次数不同

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。