您现在的位置是:主页 > news > 专做尼泊尔的旅行网站/磁力多多

专做尼泊尔的旅行网站/磁力多多

admin2025/5/26 6:31:02news

简介专做尼泊尔的旅行网站,磁力多多,56做视频网站,专业开发网站的公司dubbo注册中心挂掉后,dubbo会立即挂掉吗?搞个环境,test 1、安装jdk 2、安装nohup(yum install coreutils 可以让zookeeper在后台运行) 3、安装zookeeper 4、dubbo client server 分别配置zookeeper 5、在zookeepe…

专做尼泊尔的旅行网站,磁力多多,56做视频网站,专业开发网站的公司dubbo注册中心挂掉后,dubbo会立即挂掉吗?搞个环境,test 1、安装jdk 2、安装nohup(yum install coreutils 可以让zookeeper在后台运行) 3、安装zookeeper 4、dubbo client server 分别配置zookeeper 5、在zookeepe…

dubbo注册中心挂掉后,dubbo会立即挂掉吗?搞个环境,test

1、安装jdk
2、安装nohup(yum install coreutils 可以让zookeeper在后台运行)
3、安装zookeeper
4、dubbo client server 分别配置zookeeper
5、在zookeeper后台查看dubbo的providers 和consumers
6、kill掉zookeeper
7、test结果
8、dubbo原理

首先uname -a查看linux系统是64位的

Linux xhf_cloud 2.6.32-696.10.2.el6.x86_64 #1 SMP Tue Sep 12 14:33:29 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

1、jdk安装
centos6安装jdk8 (很详细傻瓜式linux安装jdk8以及配置环境变量):
https://tecadmin.net/install-java-8-on-centos-rhel-and-fedora/#
2、zookeeper安装
http://linuxsogood.org/1478.html (可以搭建单机的或者伪集群的都可以,但是dubbo必须使用zookeeper集群, 版本zookeeper 3.5.3beta)
3、启动zookeeper
分别启动三个zookeeper节点
nohup /usr/local/zookeeper1/bin/zkServer.sh start >> /data/zookeeper/1/logs/zookeeper1.logs 2>&1 &

nohup /usr/local/zookeeper2/bin/zkServer.sh start >> /data/zookeeper/2/logs/zookeeper2.logs 2>&1 &

nohup /usr/local/zookeeper3/bin/zkServer.sh start >> /data/zookeeper/3/logs/zookeeper3.logs 2>&1 &

4、dubbo客户端服务端代码
已经上传到github上:https://github.com/summerxhf/dubbo-demo

5、在zookeeper后台查看dubbo的providers 和consumers
ls / :查看根目录
可以每一层的通过/来查看
ls /dubbo/hf.dubbo.service.ServiceMethod/providers : 查看提供者
ls /dubbo/hf.dubbo.service.ServiceMethod/consumers :查看消费者(ip已用*号代替)

[dubbo%3A%2F%2F169.**4.**.**%3A10181%2Fhf.dubbo.service.ServiceMethod%3Fanyhost%3Dtrue%26application%3Ddubbo-serviced-demo%26dubbo%3D2.5.3%26interface%3Dhf.dubbo.service.ServiceMethod%26methods%3DdelProject%26pid%3D10120%26side%3Dprovider%26timestamp%3D1513696064119]
[consumer%3A%2F%2F169.**.**.**%2Fhf.dubbo.service.ServiceMethod%3Fapplication%3Ddubbo-client-demo%26category%3Dconsumers%26check%3Dfalse%26dubbo%3D2.5.3%26interface%3Dhf.dubbo.service.ServiceMethod%26methods%3DdelProject%26pid%3D5888%26side%3Dconsumer%26timestamp%3D1513697163082]

启动dubbo providers端(代码中的main函数)后, 启动consumers端, 可以看到调用成功:

调用远程service已经完毕,项目id:66
调用远程service已经完毕,项目id:66
调用远程service已经完毕,项目id:66
调用远程service已经完毕,项目id:66
调用远程service已经完毕,项目id:66

6、kill掉zookeeper
kill 8639 8761 8692
kill掉全部的zookeeper节点, 此时看到我们的后台, consumers仍然可以调用providers成功, 但是会报错,如下

调用远程service已经完毕,项目id是:66
WARN  - ClientCnxn                 - Session 0x2001487c62c0000 for server www.codingfuns.com/108.61.160.203:2182, unexpected error, closing socket connection and attempting reconnect
java.net.ConnectException: Connection refused: no further informationat sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:357)at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1214)
INFO  - ClientCnxn                 - Opening socket connection to server www.codingfuns.com/108.61.160.203:2182. Will not attempt to authenticate using SASL (unknown error)

7、test结果
观察一段时间, 就会发现, 大概10min左右, consumers就调用同provider了,从中我们发现, 当zookeeper down掉后, dubbo服务并没有立即停掉, 这是为什么呢? 与dubbo的原理有关,可以查看dubbo的源代码, 大概意思是:

提供者断开时,此时consumer只有这个provider提供服务,则不可以远程调用;注册中心断开时,消费者还可以通过本地缓存的provider列表进行通信,但是不能进行新服务的注册与订阅。

8、dubbo原理
1) 序列化与反序列化
java序列化不多解释了,dubbo中对象的传输是以二进制流的方式,提供了dubbo、java、json、hessian、nativejava多种序列化支持。

public ObjectOutput serialize(URL url, OutputStream out) throws IOException { return new GenericObjectOutput(out); } 
public ObjectInput deserialize(URL url, InputStream is) throws IOException { return new GenericObjectInput(is); 
} 

2)编码解码
NIO中的数据传输是通过缓存器ByteBuffer进行读写,而Netty使用的是ChannelBuffer缓存器。Dubbo在使用Netty通信时,没有直接使用ChannelBuffer数据结构,而是使用Request、Response,而NIO不能识别此数据结构,所以需要编码和解码,所以需要编码和解码,这个过程可以说是缓存器ChannelBuffer与对象之间的转化。
3)dubbo中消费者、提供者、注册中心联通性。
dubbo有四种注册中心(multicast zookeeper redis simple)推荐用zookeeper, 这里也只是说dubbo和zookeeper的原理.
如下图所示:
这里写图片描述

3.1)三者之间是长连接,provider、consumers一般只是初始化时与注册中心交互或者服务变更时

3.2)provider断开后,consumers会马上检测断开事件,并且关闭与provider之间的连接

注册中心也会检测到断开事件,并且马上断开连接,通过ondisconnect方法消除消费者注册中心的所有服务。

可以查看一下zookeeper节点,provider已经不存在,而consumers节点为空。

[zk: localhost:2181(CONNECTED) 0] ls /dubbo/hf.dubbo.service.ServiceMethod/consumers
[]

3.3)注册中心通知consumers重新比对provider列表,c**onsumers也会多次重连provider、provider也会重复注册。或由心跳机制探测后重连注册中心(心跳机制是为了防止发生意外断线而consumers无法检测FIN事件,从而无法重新连接**,也无法感知注册中心是否真存活)

3.4)注册中心断开后,provider与consumers会马上检测到断开事件,并且关闭与注册中心的连接,由心跳机制完成重连注册中心
provider与consumers会收集所有注册的服务与所有订阅的服务到失败列表,进行重新注册与订阅。

3.5)提供者断开时,此时consumer只有这个provider提供服务,则不可以远程调用;注册中心断开时,消费者还可以通过本地缓存的provider列表进行通信,但是不能进行新服务的注册与订阅。

3.6) 当provider、consumers、注册中心之间无法检测中断开事件时(如:网络断线、网络抖动等),可以通过心跳机制探测连接是否可用,若不可用,提供者端执行断开连接操作、消费者端执行重连操作、注册中心也会进行服务的销毁操作

总结:
不要想着一下子全都搞懂,一下子全都搞懂本身就是不对的。知识需要碰撞,以及“日久生情”。