Rymote.Synapse.Cluster.Gossip 1.0.0

dotnet add package Rymote.Synapse.Cluster.Gossip --version 1.0.0
                    
NuGet\Install-Package Rymote.Synapse.Cluster.Gossip -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Rymote.Synapse.Cluster.Gossip" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Rymote.Synapse.Cluster.Gossip" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Rymote.Synapse.Cluster.Gossip" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Rymote.Synapse.Cluster.Gossip --version 1.0.0
                    
#r "nuget: Rymote.Synapse.Cluster.Gossip, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Rymote.Synapse.Cluster.Gossip@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Rymote.Synapse.Cluster.Gossip&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Rymote.Synapse.Cluster.Gossip&version=1.0.0
                    
Install as a Cake Tool

Rymote.Synapse.Cluster.Gossip

UDP gossip-lite IMembershipProvider for Rymote.Synapse.Cluster. Each node broadcasts periodic heartbeats over UDP to all known peers and tracks Alive / Suspect / Dead health transitions.

What it does

  • Binds a single UDP socket to GossipPort (default 7946).
  • Every HeartbeatIntervalSeconds (default 1 s) broadcasts a HeartbeatMessage (MessagePack-encoded) to every known peer endpoint.
  • Each heartbeat carries the sender's identity, endpoint, current subscription set, and its own view of the cluster — recipients learn about peers they did not already know (gossip fan-out).
  • Tracks last_seen[peer] timestamps and fires MembershipChange events when a peer crosses a threshold:
    • Alive → Suspect after SuspectAfterSeconds (default 5 s) without a heartbeat.
    • Suspect → Dead after DeadAfterSeconds (default 15 s) without a heartbeat; the peer is removed from Members.
  • Subscription propagation is piggybacked on heartbeats — calling PublishSubscriptionAsync / WithdrawSubscriptionAsync mutates the local set; the next heartbeat carries the updated set to all peers.
  • Self-identity resolves via SYNAPSE_NODE_ID env var → HOSTNAME env var → file-persisted random GUID under DataDirectory.

What it does NOT do

This is a simplified gossip implementation, not full SWIM. The following are explicitly out of scope:

  • Indirect probes / ping-req (no third-party reachability verification).
  • Incarnation numbers / refutation (a falsely-declared dead node cannot clear itself).
  • Suspicion subjectivity / weighted voting.
  • Multicast — heartbeats are N unicast UDP datagrams, one per known peer.

Quickstart

builder.UseCluster()
       .UseGossipMembership(opts =>
       {
           opts.SelfEndPoint = new IPEndPoint(IPAddress.Parse("10.0.0.1"), 7946);
           opts.Peers =
           [
               new GossipSeed(new NodeIdentity(Guid.Parse("...")), new IPEndPoint(IPAddress.Parse("10.0.0.2"), 7946)),
               new GossipSeed(new NodeIdentity(Guid.Parse("...")), new IPEndPoint(IPAddress.Parse("10.0.0.3"), 7946)),
           ];
       });

Options

Property Default Description
SelfIdentity auto-resolved Override self node identity.
SelfEndPoint required IP:port advertised to peers.
GossipPort 7946 UDP port to bind and send on.
DataDirectory ./gossip-state Directory used for persisting generated node ID.
Peers [] Seed list of GossipSeed objects.
HeartbeatIntervalSeconds 1 How often to broadcast heartbeats.
SuspectAfterSeconds 5 Silence before peer becomes Suspect.
DeadAfterSeconds 15 Silence before peer is declared Dead and removed.
Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0 88 5/18/2026