Skip to content

quarkiverse/quarkus-mdns

Repository files navigation

Quarkus mDNS


Version License Build

A Quarkus extension allowing use of Multicast DNS or mDNS to expose service advertisement as well as discover other services on your network.

mDNS is sometimes also called ZeroConf/Bonjour/Avahi/Rendezvous and can work in conjunction with DNS Service Discovery (DNS-SD), a companion zero-configuration networking technique specified separately in RFC 6763.

Note

Quarkus mDNS is an ideal companion if you are writing an IoT (Internet of Things) application as many IoT devices use mDNS for service discovery and advertising.

Getting started

Read the full mDNS documentation.

Installation

Create a new mdns project (with a base mdns starter code):

quarkus create app mdns-app -x=io.quarkiverse.mdns:quarkus-mdns

Or add to you pom.xml directly:

<dependency>
    <groupId>io.quarkiverse.mdns</groupId>
    <artifactId>quarkus-mdns</artifactId>
    <version>{project-version}</version>
</dependency>

Service Advertisement

mDNS by default will advertise your Quarkus server for HTTP discovery.

quarkus.http.host=0.0.0.0
quarkus.http.port=8081
quarkus.application.name=integration

Will expose your server on mDNS as http://integration.local:8081 as an HTTP service type _http._tcp.local..

Important

quarkus.http.host must be set to 0.0.0.0 for the local URL http://integration.local:8081 to work properly. In dev/test mode this defaults to localhost which means the mDNS URL will not work.

Or you can inject it manually and expose any service you like. For example, this would expose it as supporting Apple TouchRemote.

@Inject
JmDNS jmdns;

public void advertise() {
    Map<String, String> props = new HashMap<>();
    props.put("DvNm", "Quarkus Client");
    props.put("RemV", "10000");
    props.put("DvTy", "iPod");
    props.put("RemN", "Remote");
    props.put("txtvers", "1");
    ServiceInfo serviceInfo = ServiceInfo.create("_touch-remote._tcp", hostName, 1024, 0, 0, props);
    jmdns.registerService(serviceInfo);
}

Mdns UI

Service Discovery

You may also use mDNS to discover other services on your network by using the injectable component. For example if you wanted to discover all the Apple Airport devices on your local network.

@Inject
JmDNS jmdns;

public void listServices() {
    ServiceInfo[] infos = jmdns.list("_airport._tcp.local.");
    for (ServiceInfo info : infos) {
        System.out.println(info);
    }
}

🧑‍💻 Contributing

  • Contribution is the best way to support and get involved in community!
  • Please, consult our Code of Conduct policies for interacting in our community.
  • Contributions to quarkus-mdns Please check our CONTRIBUTING.md

If you have any idea or question 🤷

Contributors ✨

Thanks goes to these wonderful people (emoji key):

Melloware
Melloware

🚧
Fred Bricon
Fred Bricon

🤔 💻
Max Rydahl Andersen
Max Rydahl Andersen

🤔
Holly Cummins
Holly Cummins

📖

This project follows the all-contributors specification. Contributions of any kind welcome!