Skip to main content
In clustered mode, nodes must discover each other. GoAkt uses a pluggable discovery provider that implements the discovery.Provider interface. Pass the provider to ClusterConfig.WithDiscovery() when creating the cluster.

Provider interface

type Provider interface {
    ID() string
    Initialize() error
    Register() error
    Deregister() error
    DiscoverPeers() ([]string, error)
    Close() error
}
MethodPurpose
IDProvider name.
InitializeOne-time setup (e.g., connect to backend).
RegisterRegister this node with the discovery backend.
DeregisterRemove this node on shutdown.
DiscoverPeersReturn peer addresses as host:port strings.
CloseRelease resources.

Built-in providers

ProviderPackageUse case
Consuldiscovery/consulHashiCorp Consul.
etcddiscovery/etcdetcd.
Kubernetesdiscovery/kubernetesK8s API for pod discovery.
NATSdiscovery/natsNATS for peer discovery.
mDNSdiscovery/mdnsMulticast DNS (local networks).
DNS-SDdiscovery/dnssdDNS-based service discovery.
Staticdiscovery/staticFixed list of peer addresses.
Self-manageddiscovery/selfmanagedUDP broadcast on LAN; no peer config.
Each provider has its own config type. See the package for constructors and options.

Self-managed (zero config)

The self-managed provider uses UDP broadcast for peer discovery. No third-party services or peer IPs are required; nodes on the same LAN discover each other automatically.
import "github.com/tochemey/goakt/v4/discovery/selfmanaged"

config := selfmanaged.Config{
    ClusterName: "my-app",
    SelfAddress: "192.168.1.10:7946",
}
provider := selfmanaged.NewDiscovery(&config)

Configuration

provider, err := consul.New(config)
// or: etcd.New(config), kubernetes.New(config), etc.
clusterConfig := actor.NewClusterConfig().
    WithDiscovery(provider).
    WithKinds(actor1, actor2)

system, _ := actor.NewActorSystem("app",
    actor.WithRemote(remoteConfig),
    actor.WithCluster(clusterConfig),
)
The provider is used by the cluster to find peers. Remoting must be enabled (WithRemote) for cross-node communication.

Custom provider

Implement discovery.Provider and pass it to WithDiscovery. See Extending GoAkt for the interface and wiring.