Go utility to build Peer to Peer Architecture easily.
Parameters | Type | Usage |
---|---|---|
BindAddr | string | The address that Ring will bind to for communication with other members on the ring. |
Tags | map[string]string | Tags will be sent with NodeName when a new member joins the ring. |
NodeName | string | Unique node name to identify this member. |
SeedAddresses | []string | Addresses of other members to join upon start up. |
VirtualNodeCount | int | Number of virtual nodes to create on the ring for this member. |
HashFunction | HashFunction | Hash function to calculate position of the server on the ring. |
MemberType | MemberType | Type of the membership: 1. ShardMember 2. LoadBalancerMember. |
Timeout | time.Duration | Sets the timeout in the network in handling connections. |
Logger | hclog.Logger | Human readable output mode in development and JSON mode for production. |
Create a new ring member. LoadBalancerMember
member has the list of all types of members.
import (
// Other dependencies....
"github.com/Brijeshlakkad/ring"
)
ringMember, err := ring.NewRing(ring.Config{
NodeName: "Unique_node_name_0", // Node name.
SeedAddresses: []string{}, // Addresses of other members to join upon start up.
BindAddr: "127.0.0.1:7946", // The address that Ring will bind to for communication with other members on the ring.
Tags: map[string]string{ // Tags to be sent to other members upon joining the ring.
"rpc_addr": "127.0.0.1:1234",
"custom_key": "custom_value"
},
VirtualNodeCount: 3, // This will create 3 virtual nodes on the ring.
MemberType: LoadBalancerMember, // This member will not take part in the sharding, but has the list of members (ShardMember) who is responsible for sharding.
})
Use ringMember#AddListener
method to add a new handler to be notified when new node joins on the ring.
Look
at this Handler interface
to implement your own handler.
ringMember.AddListener(listenerId string, handler Handler)
Use ringMember#AddListener
method to remove the handler from listening to the joining/leaving of other members.
All the handlers' RemoveListener
will get called when the member shutdowns.
ringMember.RemoveListener(listenerId string)
Upon join a listener will receive the below parameters in the function call:
rpcAddr
- RPC address of the new member that has joined the ring.vNodeCount
- Number of virtual nodes of the new member on the ring.
Feel free to create a PR, I’m more than happy to review and merge it.
- Onboard videos and documentation
- Clean code, full test coverage and minimal tech debt
- This utility will evolve over time!!!