Gossip是一种一致性协议,在系统设计和开发当中有着广泛的应用,网上有一些开源实现,但是并不好用有些甚至出现了一些bug,于是乎,花了一些时间,动手写了一个,目前已经在公司内部运行了几年,效果良好,并且已经开源在Github上,以飨各位。
特点:
-
API简洁
-
支持3种事件:
- UP
- DOWN
- JOIN
-
基于Vert.X
引入:
<dependency>
<groupId>net.lvsq</groupId>
<artifactId>jgossip</artifactId>
<version>1.3.2</version>
</dependency>
一个简单的例子:
int gossip_port = 60001;
String cluster = "gossip_cluster";
GossipSettings settings = new GossipSettings();
settings.setGossipInterval(1000);
try {
String myIpAddress = InetAddress.getLocalHost().getHostAddress();
List<SeedMember> seedNodes = new ArrayList<>();
SeedMember seed = new SeedMember();
seed.setCluster(cluster);
seed.setIpAddress(myIpAddress);
seed.setPort(60001);
seedNodes.add(seed);
gossipService = new GossipService(cluster, myIpAddress, gossip_port, null, seedNodes, settings, (member, state) ->System.out.println("member:" + member + " state: " + state));
} catch (Exception e) {
e.printStackTrace();
}
gossipService.start();
详细介绍请看 => 项目地址
欢迎大家fork, 如果觉得好请start ~~~