This library provides a NATS transport for HashiCorp's Raft implementation.
This project is maintained by Basekick Labs, creators of Arc.
- Go 1.25.3+
- hashicorp/raft v1.7.3+
- NATS Server v2.10.0+
go get github.com/liftbridge-io/nats-on-a-logimport (
natslog "github.com/liftbridge-io/nats-on-a-log"
"github.com/nats-io/nats.go"
)
// Connect to NATS
nc, err := nats.Connect(nats.DefaultURL)
if err != nil {
log.Fatal(err)
}
// Create NATS transport for Raft
transport, err := natslog.NewNATSTransport(
"node-1", // Node ID
"raft.", // Subject prefix
nc, // NATS connection
2*time.Second, // Timeout
os.Stderr, // Log output
)
if err != nil {
log.Fatal(err)
}
defer transport.Close()
// Use transport with Raft configuration
raftConfig := raft.DefaultConfig()
raftConfig.LocalID = "node-1"
// ... create Raft instance with transport- NATS-based transport layer for Raft consensus
- Supports Raft v1.7.3 features including pre-vote protocol
- Connection pooling via NATS subscriptions
- Configurable timeouts and logging
| Package | Coverage |
|---|---|
| nats-on-a-log | 84.7% |
Run tests with coverage:
go test -coverprofile=coverage.out ./...
go tool cover -func=coverage.outApache License 2.0