GossNet.Discovery.Consul 0.10.0

dotnet add package GossNet.Discovery.Consul --version 0.10.0
                    
NuGet\Install-Package GossNet.Discovery.Consul -Version 0.10.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="GossNet.Discovery.Consul" Version="0.10.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="GossNet.Discovery.Consul" Version="0.10.0" />
                    
Directory.Packages.props
<PackageReference Include="GossNet.Discovery.Consul" />
                    
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 GossNet.Discovery.Consul --version 0.10.0
                    
#r "nuget: GossNet.Discovery.Consul, 0.10.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 GossNet.Discovery.Consul@0.10.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=GossNet.Discovery.Consul&version=0.10.0
                    
Install as a Cake Addin
#tool nuget:?package=GossNet.Discovery.Consul&version=0.10.0
                    
Install as a Cake Tool

GossNet.Discovery.Consul

Consul-based node discovery for GossNet.Protocol.

Ships separately so the core package stays free of the Consul client dependency.

Installation

dotnet add package GossNet.Discovery.Consul

Usage

Register each gossip node with Consul under a shared service name, then point discovery at it:

using GossNet.Discovery.Consul;
using GossNet.Protocol;

var consulOptions = new ConsulDiscoveryOptions
{
    ServiceName = "gossnet",
    Address = new Uri("http://consul.internal:8500"),
    PassingOnly = true
};

var configuration = new GossNetConfiguration
{
    Hostname = "10.0.0.1",
    Port = 9055,
    DiscoveryProviderFactory = cfg => new ConsulNodeDiscovery(cfg, consulOptions)
};

using var node = new GossNetNode<MyMessage>(configuration);
node.Start();

DiscoveryProviderFactory is used rather than DiscoveryProvider because the provider needs the node's own hostname and port to exclude itself from its own results — a node registered in Consul always appears in its own service query.

Watching

ConsulNodeDiscovery implements IWatchableNodeDiscovery using blocking queries, so a service registering or deregistering reaches a node in about a round trip rather than after CacheDuration.

Nothing needs enabling — GossNetNode.Start() subscribes automatically. If the watch fails, the node logs it and falls back to cached polling.

Each request carries the X-Consul-Index from the previous result and the agent holds it open until that index moves. Three rules make that correct, and each fails quietly rather than loudly when it is wrong:

  • An index that goes backwards means Consul restarted or the table was re-indexed. It must be reset to zero to re-baseline, or the query blocks forever and no further change is ever seen.
  • An index below one must be treated as one, or the next query is a non-blocking read and the watch becomes a hot loop.
  • An unchanged index means the wait elapsed, not that anything changed, so nothing is published.

Because those are server behaviours, they are verified against a real Consul container in GossNet.Discovery.IntegrationTests rather than against a fake.

A custom IConsulHealthClient keeps working unchanged; it simply will not watch. Implement IWatchableConsulHealthClient as well to opt in.

Options

Option Default Description
ServiceName required Consul service name the nodes register under
Address http://localhost:8500 Consul agent address
Token none ACL token
Datacenter agent's own Datacenter to query
Tag none Only return instances carrying this tag
PassingOnly true Only return instances whose health checks pass
WatchWaitTime 5 minutes How long a blocking query may be held open by the agent
WatchRetryDelay 2 seconds Pause before re-establishing a failed blocking query
CacheDuration 30 seconds How long a resolved neighbour list is reused

Discovery runs on the message path, so results are cached. If Consul cannot be reached, a NodeDiscoveryException is thrown rather than returning an empty neighbour list — an unreachable agent must never be mistaken for a network of one.

License

MIT. See LICENSE.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  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. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos 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
0.10.0 90 8/20/2026
0.9.0 88 8/20/2026
0.8.2 135 8/20/2026
0.8.1 86 8/20/2026
0.8.0 94 8/20/2026
0.7.0 91 8/20/2026
0.6.0 92 8/20/2026
0.5.0 87 8/20/2026
0.4.0 87 8/20/2026
0.3.0 92 8/20/2026