dns-discovery
Discovery peers in a distributed system using regular dns and multicast dns.
npm install dns-discovery

Usage
var discovery = require('dns-discovery')
var disc = discovery()
disc.on('peer', function (name, peer) {
console.log(name, peer)
})
disc.announce('test-app', 9090)
disc.lookup('test-app')
API
var disc = discovery([options])
Create a new discovery instance. Options include:
{
server: 'discovery.example.com:9090',
ttl: someSeconds,
limit: someLimit,
multicast: true,
push: false,
domain: 'my-domain.com'
}
If you have more than one discovery server you can specify an array
{
server: [
'discovery.example.com:9090',
'another.discovery.example.com'
]
}
disc.lookup(name, [callback])
Do a lookup for a specific app name. When new peers are discovered for this name peer events will be emitted
disc.on('peer', function (name, peer) {
console.log(name)
console.log(peer)
})
disc.announce(name, peer, [callback])
Announce a new peer for a specific app name. peer
should be an object looking like this
{
host: someHost
port: somePort
}
As a shorthand option you can use disc.announce(name, port)
disc.unannounce(name, peer)
Stop announcing a peer for an app.
disc.listen([port], [callback])
Listen for dns records on a specific port. You only need to call this if you want to turn your peer into a discovery server that other peers can use to store peer objects on.
var server = discovery()
server.listen(9090, function () {
var disc = discovery({server: 'localhost:9090'})
disc.announce('test-app', 8080)
})
You can setup a discovery server to announce records on the internet as multicast-dns only works on a local network.
The port defaults to 53
which is the standard dns port.
CLI
There is a cli tool available as well
npm install -g dns-discovery
dns-discovery help
To announce a service do
dns-discovery announce test-app --port=8080
To look it up
dns-discovery lookup test-app
To run a discovery server
dns-discovery listen --port=9090 --ttl=30
And to announce to that discovery server (and over multicast-dns)
dns-discovery announce test-app --server=example.com:9090 --port=9090
And finally to lookup using that discovery server (and multicast-dns)
dns-discovery lookup test-app --server=example.com:9090
You can use any other dns client to resolve the records as well. For example using dig
.
dig @discovery.example.com test-app SRV
License
MIT