博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nettyrpc 与 zookeeper 集成日志
阅读量:4080 次
发布时间:2019-05-25

本文共 24279 字,大约阅读时间需要 80 分钟。

context = new ClassPathXmlApplicationContext("classpath:rpc-invoke-config-jdbc-client.xml");        MyPojo manage = (MyPojo) context.getBean("MyPojoJdbc");        try {            // 在这里,启动2个服务器            List
list = manage.queryList(); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } Thread.sleep(20000); // 关掉第一次请求的服务器 list = manage.queryList(); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } Thread.sleep(20000); // 开启第一次请求的服务器,关闭第2次请求的服务器 list = manage.queryList(); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } catch (Exception e) { e.printStackTrace(); } finally { context.destroy(); }

以上是客户端的代码,日志如下:

[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(117) | node data refresh: [192.168.31.104:18885, 192.168.31.104:18887][INFO] {Thread-2} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(24) | start to refresh servers 1[INFO] {Thread-2} com.newlandframework.rpc.netty.RpcServerLoader.loadAll(114) | discover new zookeeper node server : 192.168.31.104:18885[author tangjie] Netty RPC Client start success!ip:192.168.31.104port:18885protocol:RpcSerializeProtocol[serializeProtocol=protostuff,name=PROTOSTUFFSERIALIZE,ordinal=3][INFO] {Thread-2} com.newlandframework.rpc.netty.RpcServerLoader.loadAll(114) | discover new zookeeper node server : 192.168.31.104:18887[author tangjie] Netty RPC Client start success!ip:192.168.31.104port:18887protocol:RpcSerializeProtocol[serializeProtocol=protostuff,name=PROTOSTUFFSERIALIZE,ordinal=3][INFO] {Thread-2} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(44) | end refresh servers 1[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.discover(78) | using random data: 192.168.31.104:18885Tao <
>[INFO] {main-EventThread} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(117) | node data refresh: [192.168.31.104:18887][INFO] {Thread-3} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(24) | start to refresh servers 2[INFO] {Thread-3} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(44) | end refresh servers 2[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.discover(75) | using only data: 192.168.31.104:18887Tao <
>[INFO] {main-EventThread} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(117) | node data refresh: [192.168.31.104:18885, 192.168.31.104:18887][INFO] {Thread-4} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(24) | start to refresh servers 3[INFO] {Thread-4} com.newlandframework.rpc.netty.RpcServerLoader.loadAll(114) | discover new zookeeper node server : 192.168.31.104:18885[author tangjie] Netty RPC Client start success!ip:192.168.31.104port:18885protocol:RpcSerializeProtocol[serializeProtocol=protostuff,name=PROTOSTUFFSERIALIZE,ordinal=3][INFO] {Thread-4} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(44) | end refresh servers 3[INFO] {main-EventThread} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(117) | node data refresh: [192.168.31.104:18885][INFO] {Thread-5} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(24) | start to refresh servers 4[INFO] {Thread-5} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(44) | end refresh servers 4[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.discover(75) | using only data: 192.168.31.104:18885Tao <
>Process finished with exit code 0

[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(117) | node data refresh: [192.168.31.104:18885, 192.168.31.104:18887]

最初情况,启动两台服务器,分别是18885和18887端口,zookeeper最初情况下监测到两个可用节点

[INFO] {Thread-2} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(24) | start to refresh servers 1

第一次开始构建netty通道

[INFO] {Thread-2} com.newlandframework.rpc.netty.RpcServerLoader.loadAll(114) | discover new zookeeper node server : 192.168.31.104:18885
[author tangjie] Netty RPC Client start success!
ip:192.168.31.104
port:18885
protocol:RpcSerializeProtocol[serializeProtocol=protostuff,name=PROTOSTUFFSERIALIZE,ordinal=3]

第一个通道,对18885端口服务器建立长连接通道

[INFO] {Thread-2} com.newlandframework.rpc.netty.RpcServerLoader.loadAll(114) | discover new zookeeper node server : 192.168.31.104:18887
[author tangjie] Netty RPC Client start success!
ip:192.168.31.104
port:18887
protocol:RpcSerializeProtocol[serializeProtocol=protostuff,name=PROTOSTUFFSERIALIZE,ordinal=3]

第二个通道,对18887端口服务器建立长连接通道

[INFO] {Thread-2} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(44) | end refresh servers 1

第一次构建netty通道结束

[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.discover(78) | using random data: 192.168.31.104:18885

客户端正式第一次请求,从两个节点种选中18885节点

Tao <<col1:1 col2:22>>

请求返回成功

[INFO] {main-EventThread} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(117) | node data refresh: [192.168.31.104:18887]

乘主线程睡眠20秒期间手动关闭18885服务器,5秒后zookeeper通知客户端,重新监测可用节点,这里可见,仅剩余一个18887节点

[INFO] {Thread-3} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(24) | start to refresh servers 2

开始第2构建netty通道,由于没有新节点可用,什么都不做

[INFO] {Thread-3} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(44) | end refresh servers 2

[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.discover(75) | using only data: 192.168.31.104:18887

第2次客户端请求,正常使用了仅有的一个zookeeper所返回的可用节点18887,这里一系列动作考察宕机后,客户端是否会规避该宕机的服务器

Tao <<col1:1 col2:22>>

第2次请求成功返回

[INFO] {main-EventThread} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(117) | node data refresh: [192.168.31.104:18885, 192.168.31.104:18887]

乘第2次主线程睡眠,手动开启刚才关闭的18885节点服务器,5秒后zookeeper通知客户端重新监测可用节点,这里可见重新监测到2台服务器

[INFO] {Thread-4} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(24) | start to refresh servers 3

第3构建netty通道

[INFO] {Thread-4} com.newlandframework.rpc.netty.RpcServerLoader.loadAll(114) | discover new zookeeper node server : 192.168.31.104:18885
[author tangjie] Netty RPC Client start success!
ip:192.168.31.104
port:18885
protocol:RpcSerializeProtocol[serializeProtocol=protostuff,name=PROTOSTUFFSERIALIZE,ordinal=3]

发现一个新节点,于是重新为该节点建立通道

[INFO] {Thread-4} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(44) | end refresh servers 3

结束

[INFO] {main-EventThread} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(117) | node data refresh: [192.168.31.104:18885]

刚才在开启18885服务器时,同时也关闭18887服务器,zookeeper也通知了重新监测可用节点的指令,于是重新监测,这里可见,18887已不可用

[INFO] {Thread-5} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(24) | start to refresh servers 4

开始第4次netty通道建立,因为是干掉了18887,并没有新增节点,故什么也不干

[INFO] {Thread-5} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(44) | end refresh servers 4

[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.discover(75) | using only data: 192.168.31.104:18885

客户端第3次请求,选用了刚才关闭了,又重新开启的18885服务器所重新建立的netty通道

Tao <<col1:1 col2:22>>

第3次请求成功,这里一系列的动作考察宕机修复重新开启新增节点后客户端重新建立的netty通道是否可用

Process finished with exit code 0

弱点:

zookeeper自服务器宕机至5秒后重新建立netty通道成功期间,netty客户端的请求失败

将这种方式扩展多多台服务:

[NettyRPC 2.0,Build 2016/10/7,Author:tangjie http://www.cnblogs.com/jietang/]

ThreadPool Core[threads:16, queues:-1]
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/sunyuming/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.4.1/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/sunyuming/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(120) | service[pj1] node data (total 2) refresh: [192.168.31.104:18887, 192.168.31.104:18885]
[INFO] {Thread-2} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(29) | start to refresh servers [pj1]
[INFO] {Thread-2} com.newlandframework.rpc.netty.RpcServerLoader.loadAll(137) | discover new zookeeper node server : 192.168.31.104:18887:pj1
[INFO] {Thread-2} com.newlandframework.rpc.netty.RpcServerLoader.load(163) | [author tangjie] Netty RPC Client start success!
regName:pj1 ip:192.168.31.104 port:18887protocol:RpcSerializeProtocol[serializeProtocol=protostuff,name=PROTOSTUFFSERIALIZE,ordinal=3]
[INFO] {Thread-2} com.newlandframework.rpc.netty.RpcServerLoader.loadAll(137) | discover new zookeeper node server : 192.168.31.104:18885:pj1
[INFO] {Thread-2} com.newlandframework.rpc.netty.RpcServerLoader.load(163) | [author tangjie] Netty RPC Client start success!
regName:pj1 ip:192.168.31.104 port:18885protocol:RpcSerializeProtocol[serializeProtocol=protostuff,name=PROTOSTUFFSERIALIZE,ordinal=3]
[INFO] {Thread-2} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(47) | end refresh servers [pj1]
set:192.168.31.104:18887:pj1:[id: 0x347500d1, L:/192.168.31.104:62431 - R:/192.168.31.104:18887]
set:192.168.31.104:18885:pj1:[id: 0x5d219b02, L:/192.168.31.104:62432 - R:/192.168.31.104:18885]
[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(120) | service[pj2] node data (total 2) refresh: [192.168.31.104:18897, 192.168.31.104:18895]
[INFO] {Thread-3} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(29) | start to refresh servers [pj2]
[INFO] {Thread-3} com.newlandframework.rpc.netty.RpcServerLoader.loadAll(137) | discover new zookeeper node server : 192.168.31.104:18897:pj2
[INFO] {Thread-3} com.newlandframework.rpc.netty.RpcServerLoader.load(163) | [author tangjie] Netty RPC Client start success!
regName:pj2 ip:192.168.31.104 port:18897protocol:RpcSerializeProtocol[serializeProtocol=jdknative,name=JDKSERIALIZE,ordinal=0]
[INFO] {Thread-3} com.newlandframework.rpc.netty.RpcServerLoader.loadAll(137) | discover new zookeeper node server : 192.168.31.104:18895:pj2
[INFO] {Thread-3} com.newlandframework.rpc.netty.RpcServerLoader.load(163) | [author tangjie] Netty RPC Client start success!
regName:pj2 ip:192.168.31.104 port:18895protocol:RpcSerializeProtocol[serializeProtocol=jdknative,name=JDKSERIALIZE,ordinal=0]
[INFO] {Thread-3} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(47) | end refresh servers [pj2]
set:192.168.31.104:18897:pj2:[id: 0x879af2a0, L:/192.168.31.104:62433 - R:/192.168.31.104:18897]
set:192.168.31.104:18895:pj2:[id: 0x25c16cd0, L:/192.168.31.104:62434 - R:/192.168.31.104:18895]
[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.discover(81) | using random data: 192.168.31.104:18885
get:192.168.31.104:18885:pj1:[id: 0x5d219b02, L:/192.168.31.104:62432 - R:/192.168.31.104:18885]
Tao <<col1:1 col2:pj122>>
[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.discover(81) | using random data: 192.168.31.104:18897
get:192.168.31.104:18897:pj2:[id: 0x879af2a0, L:/192.168.31.104:62433 - R:/192.168.31.104:18897]
Tao <<col1:1 col2:pj222>>
[INFO] {main-EventThread} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(120) | service[pj1] node data (total 1) refresh: [192.168.31.104:18887]
[INFO] {Thread-4} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(29) | start to refresh servers [pj1]
[INFO] {Thread-4} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(47) | end refresh servers [pj1]
[INFO] {main-EventThread} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(120) | service[pj2] node data (total 1) refresh: [192.168.31.104:18895]
[INFO] {Thread-5} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(29) | start to refresh servers [pj2]
[INFO] {Thread-5} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(47) | end refresh servers [pj2]
[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.discover(78) | using only data: 192.168.31.104:18887
get:192.168.31.104:18887:pj1:[id: 0x347500d1, L:/192.168.31.104:62431 - R:/192.168.31.104:18887]
Tao <<col1:1 col2:pj122>>
[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.discover(78) | using only data: 192.168.31.104:18895
get:192.168.31.104:18895:pj2:[id: 0x25c16cd0, L:/192.168.31.104:62434 - R:/192.168.31.104:18895]
Tao <<col1:1 col2:pj222>>
[INFO] {main-EventThread} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(120) | service[pj2] node data (total 2) refresh: [192.168.31.104:18895, 192.168.31.104:18897]
[INFO] {Thread-6} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(29) | start to refresh servers [pj2]
[INFO] {Thread-6} com.newlandframework.rpc.netty.RpcServerLoader.loadAll(137) | discover new zookeeper node server : 192.168.31.104:18897:pj2
[INFO] {Thread-6} com.newlandframework.rpc.netty.RpcServerLoader.load(163) | [author tangjie] Netty RPC Client start success!
regName:pj2 ip:192.168.31.104 port:18897protocol:RpcSerializeProtocol[serializeProtocol=jdknative,name=JDKSERIALIZE,ordinal=0]
[INFO] {Thread-6} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(47) | end refresh servers [pj2]
set:192.168.31.104:18897:pj2:[id: 0xc1792485, L:/192.168.31.104:62456 - R:/192.168.31.104:18897]
[INFO] {main-EventThread} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(120) | service[pj1] node data (total 2) refresh: [192.168.31.104:18887, 192.168.31.104:18885]
[INFO] {Thread-7} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(29) | start to refresh servers [pj1]
[INFO] {Thread-7} com.newlandframework.rpc.netty.RpcServerLoader.loadAll(137) | discover new zookeeper node server : 192.168.31.104:18885:pj1
[INFO] {Thread-7} com.newlandframework.rpc.netty.RpcServerLoader.load(163) | [author tangjie] Netty RPC Client start success!
regName:pj1 ip:192.168.31.104 port:18885protocol:RpcSerializeProtocol[serializeProtocol=protostuff,name=PROTOSTUFFSERIALIZE,ordinal=3]
[INFO] {Thread-7} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(47) | end refresh servers [pj1]
set:192.168.31.104:18885:pj1:[id: 0xc2a6e7d7, L:/192.168.31.104:62460 - R:/192.168.31.104:18885]
[INFO] {main-EventThread} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(120) | service[pj1] node data (total 1) refresh: [192.168.31.104:18885]
[INFO] {Thread-8} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(29) | start to refresh servers [pj1]
[INFO] {Thread-8} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(47) | end refresh servers [pj1]
[INFO] {main-EventThread} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(120) | service[pj2] node data (total 1) refresh: [192.168.31.104:18897]
[INFO] {Thread-9} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(29) | start to refresh servers [pj2]
[INFO] {Thread-9} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(47) | end refresh servers [pj2]
[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.discover(78) | using only data: 192.168.31.104:18885
get:192.168.31.104:18885:pj1:[id: 0xc2a6e7d7, L:/192.168.31.104:62460 - R:/192.168.31.104:18885]
Tao <<col1:1 col2:pj122>>
[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.discover(78) | using only data: 192.168.31.104:18897
get:192.168.31.104:18897:pj2:[id: 0xc1792485, L:/192.168.31.104:62456 - R:/192.168.31.104:18897]
Tao <<col1:1 col2:pj222>>

分析:

pj1和pj2两个服务

#pj1 使用 18887和18885 端口,protostuff建立服务#pj2 使用 18897和18895 端口,jdk建立服务

[NettyRPC 2.0,Build 2016/10/7,Author:tangjie http://www.cnblogs.com/jietang/]

ThreadPool Core[threads:16, queues:-1]
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/sunyuming/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.4.1/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/sunyuming/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]

[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(120) | service[pj1] node data (total 2) refresh: [192.168.31.104:18887, 192.168.31.104:18885]
[INFO] {Thread-2} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(29) | start to refresh servers [pj1]

[INFO] {Thread-2} com.newlandframework.rpc.netty.RpcServerLoader.loadAll(137) | discover new zookeeper node server : 192.168.31.104:18887:pj1
[INFO] {Thread-2} com.newlandframework.rpc.netty.RpcServerLoader.load(163) | [author tangjie] Netty RPC Client start success!
regName:pj1 ip:192.168.31.104 port:18887protocol:RpcSerializeProtocol[serializeProtocol=protostuff,name=PROTOSTUFFSERIALIZE,ordinal=3]

[INFO] {Thread-2} com.newlandframework.rpc.netty.RpcServerLoader.loadAll(137) | discover new zookeeper node server : 192.168.31.104:18885:pj1
[INFO] {Thread-2} com.newlandframework.rpc.netty.RpcServerLoader.load(163) | [author tangjie] Netty RPC Client start success!
regName:pj1 ip:192.168.31.104 port:18885protocol:RpcSerializeProtocol[serializeProtocol=protostuff,name=PROTOSTUFFSERIALIZE,ordinal=3]

[INFO] {Thread-2} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(47) | end refresh servers [pj1]

set:192.168.31.104:18887:pj1:[id: 0x347500d1, L:/192.168.31.104:62431 - R:/192.168.31.104:18887]
set:192.168.31.104:18885:pj1:[id: 0x5d219b02, L:/192.168.31.104:62432 - R:/192.168.31.104:18885]

[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(120) | service[pj2] node data (total 2) refresh: [192.168.31.104:18897, 192.168.31.104:18895]
[INFO] {Thread-3} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(29) | start to refresh servers [pj2]

[INFO] {Thread-3} com.newlandframework.rpc.netty.RpcServerLoader.loadAll(137) | discover new zookeeper node server : 192.168.31.104:18897:pj2
[INFO] {Thread-3} com.newlandframework.rpc.netty.RpcServerLoader.load(163) | [author tangjie] Netty RPC Client start success!
regName:pj2 ip:192.168.31.104 port:18897protocol:RpcSerializeProtocol[serializeProtocol=jdknative,name=JDKSERIALIZE,ordinal=0]

[INFO] {Thread-3} com.newlandframework.rpc.netty.RpcServerLoader.loadAll(137) | discover new zookeeper node server : 192.168.31.104:18895:pj2
[INFO] {Thread-3} com.newlandframework.rpc.netty.RpcServerLoader.load(163) | [author tangjie] Netty RPC Client start success!
regName:pj2 ip:192.168.31.104 port:18895protocol:RpcSerializeProtocol[serializeProtocol=jdknative,name=JDKSERIALIZE,ordinal=0]

[INFO] {Thread-3} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(47) | end refresh servers [pj2]

set:192.168.31.104:18897:pj2:[id: 0x879af2a0, L:/192.168.31.104:62433 - R:/192.168.31.104:18897]
set:192.168.31.104:18895:pj2:[id: 0x25c16cd0, L:/192.168.31.104:62434 - R:/192.168.31.104:18895]

总共建立4条通道

[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.discover(81) | using random data: 192.168.31.104:18885
get:192.168.31.104:18885:pj1:[id: 0x5d219b02, L:/192.168.31.104:62432 - R:/192.168.31.104:18885]
Tao <<col1:1 col2:pj122>>
[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.discover(81) | using random data: 192.168.31.104:18897
get:192.168.31.104:18897:pj2:[id: 0x879af2a0, L:/192.168.31.104:62433 - R:/192.168.31.104:18897]
Tao <<col1:1 col2:pj222>>

干掉 蓝色的两台服务器,zk通知客户端

[INFO] {main-EventThread} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(120) | service[pj1] node data (total 1) refresh: [192.168.31.104:18887]
[INFO] {Thread-4} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(29) | start to refresh servers [pj1]
[INFO] {Thread-4} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(47) | end refresh servers [pj1]
[INFO] {main-EventThread} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(120) | service[pj2] node data (total 1) refresh: [192.168.31.104:18895]
[INFO] {Thread-5} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(29) | start to refresh servers [pj2]
[INFO] {Thread-5} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(47) | end refresh servers [pj2]

干掉两台第1次请求的服务器,没有新服务器什么都不干

[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.discover(78) | using only data: 192.168.31.104:18887
get:192.168.31.104:18887:pj1:[id: 0x347500d1, L:/192.168.31.104:62431 - R:/192.168.31.104:18887]
Tao <<col1:1 col2:pj122>>
[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.discover(78) | using only data: 192.168.31.104:18895
get:192.168.31.104:18895:pj2:[id: 0x25c16cd0, L:/192.168.31.104:62434 - R:/192.168.31.104:18895]
Tao <<col1:1 col2:pj222>>

重启192.168.31.104:18885,192.168.31.104:18897

[INFO] {main-EventThread} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(120) | service[pj2] node data (total 2) refresh: [192.168.31.104:18895, 192.168.31.104:18897]
[INFO] {Thread-6} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(29) | start to refresh servers [pj2]
[INFO] {Thread-6} com.newlandframework.rpc.netty.RpcServerLoader.loadAll(137) | discover new zookeeper node server : 192.168.31.104:18897:pj2(发现pj2下一台新服务)
[INFO] {Thread-6} com.newlandframework.rpc.netty.RpcServerLoader.load(163) | [author tangjie] Netty RPC Client start success!
regName:pj2 ip:192.168.31.104 port:18897protocol:RpcSerializeProtocol[serializeProtocol=jdknative,name=JDKSERIALIZE,ordinal=0]
[INFO] {Thread-6} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(47) | end refresh servers [pj2]
set:192.168.31.104:18897:pj2:[id: 0xc1792485, L:/192.168.31.104:62456 - R:/192.168.31.104:18897]    (新的通道)
[INFO] {main-EventThread} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(120) | service[pj1] node data (total 2) refresh: [192.168.31.104:18887, 192.168.31.104:18885]
[INFO] {Thread-7} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(29) | start to refresh servers [pj1]
[INFO] {Thread-7} com.newlandframework.rpc.netty.RpcServerLoader.loadAll(137) | discover new zookeeper node server : 192.168.31.104:18885:pj1(发现pj1下一台新服务)
[INFO] {Thread-7} com.newlandframework.rpc.netty.RpcServerLoader.load(163) | [author tangjie] Netty RPC Client start success!
regName:pj1 ip:192.168.31.104 port:18885protocol:RpcSerializeProtocol[serializeProtocol=protostuff,name=PROTOSTUFFSERIALIZE,ordinal=3]
[INFO] {Thread-7} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(47) | end refresh servers [pj1]
set:192.168.31.104:18885:pj1:[id: 0xc2a6e7d7, L:/192.168.31.104:62460 - R:/192.168.31.104:18885]    (新的通道)

下面一部分干掉两台第2次请求的服务器192.168.31.104:18887,192.168.31.104:18895    (为了强制客户端discover使用重启服务并重建通道的192.168.31.104:18885,192.168.31.104:18897

[INFO] {main-EventThread} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(120) | service[pj1] node data (total 1) refresh: [192.168.31.104:18885]
[INFO] {Thread-8} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(29) | start to refresh servers [pj1]
[INFO] {Thread-8} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(47) | end refresh servers [pj1]
[INFO] {main-EventThread} com.newlandframework.rpc.zookeeper.ServiceDiscovery.watchNode(120) | service[pj2] node data (total 1) refresh: [192.168.31.104:18897]
[INFO] {Thread-9} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(29) | start to refresh servers [pj2]
[INFO] {Thread-9} com.newlandframework.rpc.zookeeper.ServiceDiscoveryThread.run(47) | end refresh servers [pj2]

没有新增,什么都不干(因为时差的关系)

[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.discover(78) | using only data: 192.168.31.104:18885
get:192.168.31.104:18885:pj1:[id: 0xc2a6e7d7, L:/192.168.31.104:62460 - R:/192.168.31.104:18885]
Tao <<col1:1 col2:pj122>>
[INFO] {main} com.newlandframework.rpc.zookeeper.ServiceDiscovery.discover(78) | using only data: 192.168.31.104:18897
get:192.168.31.104:18897:pj2:[id: 0xc1792485, L:/192.168.31.104:62456 - R:/192.168.31.104:18897]
Tao <<col1:1 col2:pj222>>

你可能感兴趣的文章
Objective-C 基础入门(一)
查看>>
Objective-C 基础入门(三) 读写文件与回调
查看>>
C++ STL标准库与泛型编程(一)概述
查看>>
C++ STL标准库与泛型编程(四)Deque、Queue、Stack 深度探索
查看>>
C++ STL标准库 算法
查看>>
JVM内存模型_Minor GC笔记
查看>>
SpringCloud学习之PassCloud——(一)PassCloud源代码下载
查看>>
Linux下安装Python环境并部署NLP项目
查看>>
Nginx篇-springCloud配置Gateway+Nginx进行反向代理和负载均衡
查看>>
Nginx篇-Nginx配置动静分离
查看>>
缓存篇-Redis缓存失效以及解决方案
查看>>
缓存篇-使用Redis进行分布式锁应用
查看>>
缓存篇-Redisson的使用
查看>>
phpquery抓取网站内容简单介绍
查看>>
找工作准备的方向(4月22日写的)
查看>>
关于fwrite写入文件后打开查看是乱码的问题
查看>>
用结构体指针前必须要用malloc,不然会出现段错误
查看>>
Linux系统中的美
查看>>
一些实战项目(linux应用层编程,多线程编程,网络编程)
查看>>
我觉得专注于去学东西就好了,与世无争。
查看>>