实现dubbo+zookeeper+spring 纯maven项目开发

参考:  https://zhuanlan.zhihu.com/p/66482965

首先,1. dubbo+spring  2.dubbo+SpringBoot,这一次我介绍的是第一种 dubbo+spring

整个工程的架构分为三个部分:

    第一部分:接口,面向接口编程的思想

    第二部分:服务消费者,Consumer

    第三部分:服务提供者,Provider

我们为了试验这三个东西,创建maven项目,然后在里面添加三个模块,操作步骤如下:

首先创建一个maven项目,如果出现maven项目中没有pom.xml和SRC文件目录,参考本作者得其他的博客

然后在项目中创建模块(module),如下图所示,因为是在maven项目下的两个maven作为两个项目,所以不需要存在父类工程,所以父工程设置为none

 

这就是面向接口的编程思想,在dubbo-service里面是接口,dubbo-consumer和dubbo-provider都是依赖于dubbo-service,需要引入依赖来建立dubbo-consumer和dubbo-servicer,dubbo-provider和dubbo-service的关系。

 

 

 

 

第一部分:1.在接口里写我们的方法,然后这就是面向接口的编程

    2.    

    2.1   分别在dubbo-consemer和dubbo-provider里面添加依赖,就是把dubbo-service添加到dubbo-consemer和dubbo-provider里面去,参加下图左边,这是作为两者与dubbo-service的连接的地方

    2.2   然后,先在dubbo-provider,添加dubbo的依赖和zookeeper客户端的依赖(见下图)

           在项目中resources里面添加配置文件 dubbo-provider.xml文件,主要是定义 应用服务名称协议和接口, 以及发布到哪里(注册中心的地址), 以及发送什么(定义服务的提供者) 

    2.3  然后需要在项目中添加main函数,来启动dubbo,上传服务到zookeeper。这里记住要关闭防火墙,记住报错的类型,一般需要连接虚拟机的时候需设置防火墙

 

 

 





<dependencies>
<dependency>
<groupId>com.cn</groupId>
<artifactId>dubbo-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>







2.2步骤:

 

 

这里面的  dubbo:application name 就是给应用起一个名字,  dubbo:protocol port 协议的端口需要固定设置,

<dubbo:registry protocol="zookeeper" address="192.168.0.22:2181"/> 这里面的address是安装zookeeper的虚拟机的地址和端口, 这个端口需要在虚拟机里面防火墙里面打开,不然会提示下面的无法连接的错误。<bean id="userServices" class="com.qingfeng.services.impl.UserServiceImp"/>   这里面是实现类,即指的是dubbo-provider下的实现类,这是服务提供者

<dubbo:service interface="coms.qingfeng.servicess.IUserServices" ref="userServices"/>   定义接口,指的是 dubbo-provider所依赖的接口dubbo-service里面的东西,这里做了测试,三个项目的目录结构不一样也是没有问题的,照样可以发布出去。

2.3 main函数

 

 启动之后会出现的问题是:

错误提示:
Caused by: java.lang.IllegalStateException: Zookeeper is not connected yet!
表示,就是防火墙把访问拦截了, 我们需要的重现设置一下防火墙
我们找到iptables,然后编辑设置, 防火墙是在系统设置里面,所以我们先找到 cd /etc/sysconfig/iptables 然后编辑防火墙 vim iptables 然后重启防火墙,
如果不知道重庆命令,看报错的提示的,service iptables testart 如果报错,则选择 systemctl restart iptables.service

到注册中心我们可以看到,已经有服务了,

 

 2.4 消费者

首先也是添加dubbo和zookeeper的依赖, 因为都是要使用到注册中心的, 具体的可以参看图,参见2.3步骤

我们向dubbo-consumer里面的pom.xml添加dubbo和zkclient的依赖,然后配置一下端口(在resources里面新建一个xml文件,在该文件里面添加端口)

 

这里面是配置的文件的

 

 

 这是main函数里面开始调用我们的东西,

 在上图所在的编辑页面加上 System.in.read();来进行编辑查看

 

 

 

 负载均衡,

当存在应用名字一样的服务的时候,我们应该选哪一个提供者?

下图是服务不同提供者提供的相同的应用

 

 首先了解一下,负载均衡的几种方式:

Random LoadBlance 随机,按照权重设置随机概率, 在一个截面上碰撞的概率高,但是调用量越大,分布越均匀。(一般不推荐使用)

RoundRobin LoadBlance  轮询政策, 存在 慢的提供者 累积请求的问题, 因为是消费者去请求服务,而服务的提供者去提供服务,相同应用名称的服务,不同的提供者之间是相互的轮换提供, 如果采取轮询政策,由于提供者的效率不同,效率慢的提供者会存在请求的积累,到你了就给你,不会考虑其他的东西。

LeastActive LoadBlance  最少活跃调用数,  根据能力,快的提供者多分配请求, 慢的提供者少分配请求。

ConsistentHash LoadBlance  一致性哈希 参见维基百科,   当某一台提供者挂掉时,原本发往该提供者的请求,基于虚拟的节点,平摊到其他的提供者,不会引起剧烈的变动。

 

 如何设置 负载均衡 : 

服务端设置:

  

客户端设置: 在dubbo-consumer.xml里面设置,LoadBlance=“roundrobin” 就是随机的意思

   

 效果如下:

 

posted @ 2020-04-30 22:58  1514  阅读(309)  评论(1)    收藏  举报