# jgossip
**Repository Path**: TimVanX/jgossip
## Basic Information
- **Project Name**: jgossip
- **Description**: A Apache V2 gossip protocol implementation in Java
Java版本的gossip协议实现
Fork 自 lvsq
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2020-03-19
- **Last Updated**: 2022-05-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# JGossip
一个 Java 版的 Gossip 协议实现。
Gossip是一种一致性协议,在系统设计和开发当中有着广泛的应用,网上有一些开源实现,但是并不好用有些甚至出现了一些bug,于是乎,花了一些时间,动手写了一个,目前已经在公司内部运行了几年,效果良好,并且已经开源在Github上,以飨各位。
[Jgossip - gossip协议的开源实现](http://https://lvsq.net/2019/12/jgossip/)
# Gossip
Gossip protocol is a method for a group of nodes to discover and check the liveliness of a cluster. More information can be found at http://en.wikipedia.org/wiki/Gossip_protocol.
# Usage
## Maven
```xml
net.lvsq
jgossip
1.3.2
```
#### First you need one or more seed members
```java
List seedNodes = new ArrayList<>();
SeedMember seed = new SeedMember();
seed.setCluster(cluster);
seed.setIpAddress(ipAddress);
seed.setPort(port);
seedNodes.add(seed);
```
#### Then, instantiation a `GossipService` object
```java
GossipService gossipService = new GossipService(cluster,ipAddress, port, id, seedNodes, new GossipSettings(), (member, state) -> {});
```
#### Run `GossipService`
```java
gossipService.start();
```
#### Stop
```java
gossipService.shutdown();
```
# Settings
* gossipInterval - How often (in milliseconds) to gossip list of members to other node(s). Default is 1000ms
* networkDelay - Network delay in ms. Default is 200ms
* msgService - Which message sync implementation. Default is **UDPMsgService.class** use UDP protocol to send message, certainly you can extand it.
* deleteThreshold - Delete the deadth node when the sync message is not received more than [deleteThreshold] times. Default is 3
# Event Listener
Now, we have three kinds of event
```java
GossipState.UP;
GossipState.DOWN;
GossipState.JOIN;
```
# Example
```java
int gossip_port = 60001;
String cluster = "gossip_cluster";
GossipSettings settings = new GossipSettings();
settings.setGossipInterval(1000);
try {
String myIpAddress = InetAddress.getLocalHost().getHostAddress();
List 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();
```