• Stars
    star
    833
  • Rank 54,737 (Top 2 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created almost 7 years ago
  • Updated 7 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

HiveMQ MQTT Client is an MQTT 5.0 and MQTT 3.1.1 compatible and feature-rich high-performance Java client library with different API flavours and backpressure support

HiveMQ MQTT Client

Maven Central javadoc GitHub Workflow Status (branch)

MQTT 5.0 and 3.1.1 compatible and feature-rich high-performance Java client library with different API flavours and backpressure support.

Features

  • All MQTT 3.1.1 and MQTT 5.0 features
  • API flavors:
    • Reactive: Reactive Streams compatible, RxJava and Reactor APIs available
    • Asynchronous API: futures and callbacks
    • Blocking API: for quick start and testing
    • Switch flexibly between flavours and use them concurrently
    • Flavours are clearly separated but have a consistent API style
  • Backpressure support:
    • QoS 1 and 2
    • QoS 0 (dropping incoming messages, if necessary)
    • Bringing MQTT flow control and reactive pull backpressure together
  • Transports:
    • TCP
    • SSL/TLS
      • All TLS versions up to TLS 1.3 are supported
      • TLS mutual authentication
      • TLS Server Name Indication (SNI)
      • TLS Session Resumption
      • Default and customizable hostname verification
    • WebSocket, Secure WebSocket
    • Proxy: SOCKS4, SOCKS5, HTTP CONNECT
    • All possible combinations
  • Automatic and configurable thread management
  • Automatic and configurable reconnect handling and message redelivery
  • Automatic and configurable resubscribe if the session expired
  • Manual message acknowledgment
    • Selectively enable manual acknowledgment for specific streams
    • Acknowledge messages that are emitted to multiple streams independently per stream (the client aggregates the acknowledgments before sending MQTT acknowledgments)
    • Order of manual acknowledgment does not matter (the client automatically ensures the order of MQTT acknowledgments for 100% compatibility with the MQTT specification)
  • Lifecycle listeners
    • When connected
    • When disconnected or connection failed
  • MQTT 5 specific:
    • Pluggable Enhanced Authentication support (additional to MQTT specification: server-triggered re-authentication)
    • Automatic Topic Alias mapping
    • Interceptors for QoS flows

Users

BMW CarIT    joynr    openHAB    Eclipse Ditto    Open Smart Grid Platform    CorreoMQTT    HiveMQ Spring Boot Starter    HiveMQ Spring Boot Starter    HiveMQ Spring Boot Starter

If you use the HiveMQ MQTT Client in a project that is not listed here, feel free to open an issue or pull request.

How to use

Java 8 or higher is required.

Dependency

Gradle

If you use Gradle, just include the following inside your build.gradle(.kts) file.

dependencies {
  implementation("com.hivemq:hivemq-mqtt-client:1.3.0")
}

For optional features you can choose to include additional modules:

dependencies {
  implementation(platform("com.hivemq:hivemq-mqtt-client-websocket:1.3.0"))
  implementation(platform("com.hivemq:hivemq-mqtt-client-proxy:1.3.0"))
  implementation(platform("com.hivemq:hivemq-mqtt-client-epoll:1.3.0"))
  implementation("com.hivemq:hivemq-mqtt-client-reactor:1.3.0")
}

Maven

If you use Maven, just include the following inside your pom.xml file.

<project>
    ...
    <dependencies>
        <dependency>
            <groupId>com.hivemq</groupId>
            <artifactId>hivemq-mqtt-client</artifactId>
            <version>1.3.0</version>
        </dependency>
    </dependencies>
    ...
</project>

NOTE: You have to set the compiler version to 1.8 or higher.

<project>
    ...
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    ...
</project>

For optional features you can choose to include additional modules:

<project>
    ...
    <dependencies>
        <dependency>
            <groupId>com.hivemq</groupId>
            <artifactId>hivemq-mqtt-client-websocket</artifactId>
            <version>1.3.0</version>
            <type>pom</type>
        </dependency>
    </dependencies>
    <dependencies>
        <dependency>
            <groupId>com.hivemq</groupId>
            <artifactId>hivemq-mqtt-client-proxy</artifactId>
            <version>1.3.0</version>
            <type>pom</type>
        </dependency>
    </dependencies>
    <dependencies>
        <dependency>
            <groupId>com.hivemq</groupId>
            <artifactId>hivemq-mqtt-client-epoll</artifactId>
            <version>1.3.0</version>
            <type>pom</type>
        </dependency>
    </dependencies>
    <dependencies>
        <dependency>
            <groupId>com.hivemq</groupId>
            <artifactId>hivemq-mqtt-client-reactor</artifactId>
            <version>1.3.0</version>
        </dependency>
    </dependencies>
    ...
</project>

Shaded version

If you are experiencing problems with transitive dependencies, you can try the shaded version. This version packs the transitive dependencies which are only used internal under a different package name. The shaded version includes the websocket, proxy and epoll modules. To use the shaded version just append -shaded to the artifact name.

Gradle

dependencies {
  implementation("com.hivemq:hivemq-mqtt-client-shaded:1.3.0")
}

Maven

<project>
    ...
    <dependencies>
        <dependency>
            <groupId>com.hivemq</groupId>
            <artifactId>hivemq-mqtt-client-shaded</artifactId>
            <version>1.3.0</version>
        </dependency>
    </dependencies>
    ...
</project>

Snapshots

Snapshots can be obtained using JitPack.

Gradle

repositories {
  ...
  maven { url 'https://jitpack.io' }
}

dependencies {
  implementation("com.github.hivemq.hivemq-mqtt-client:hivemq-mqtt-client:develop-SNAPSHOT")

  // snapshots for optional modules
  implementation(platform("com.github.hivemq.hivemq-mqtt-client:hivemq-mqtt-client-websocket:develop-SNAPSHOT"))
  implementation(platform("com.github.hivemq.hivemq-mqtt-client:hivemq-mqtt-client-proxy:develop-SNAPSHOT"))
  implementation(platform("com.github.hivemq.hivemq-mqtt-client:hivemq-mqtt-client-epoll:develop-SNAPSHOT"))
  implementation("com.github.hivemq.hivemq-mqtt-client:hivemq-mqtt-client-reactor:develop-SNAPSHOT")
}

Maven

<project>
    ...
    <repositories>
        <repository>
            <id>jitpack.io</id>
            <url>https://jitpack.io</url>
        </repository>
    </repositories>
    
    <dependencies>
        <dependency>
            <groupId>com.github.hivemq.hivemq-mqtt-client</groupId>
            <artifactId>hivemq-mqtt-client</artifactId>
            <version>develop-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <!-- snapshots for optional modules -->
    <dependencies>
        <dependency>
            <groupId>com.github.hivemq.hivemq-mqtt-client</groupId>
            <artifactId>hivemq-mqtt-client-websocket</artifactId>
            <version>develop-SNAPSHOT</version>
            <type>pom</type>
        </dependency>
    </dependencies>
    <dependencies>
        <dependency>
            <groupId>com.github.hivemq.hivemq-mqtt-client</groupId>
            <artifactId>hivemq-mqtt-client-proxy</artifactId>
            <version>develop-SNAPSHOT</version>
            <type>pom</type>
        </dependency>
    </dependencies>
    <dependencies>
        <dependency>
            <groupId>com.github.hivemq.hivemq-mqtt-client</groupId>
            <artifactId>hivemq-mqtt-client-epoll</artifactId>
            <version>develop-SNAPSHOT</version>
            <type>pom</type>
        </dependency>
    </dependencies>
    <dependencies>
        <dependency>
            <groupId>com.github.hivemq.hivemq-mqtt-client</groupId>
            <artifactId>hivemq-mqtt-client-reactor</artifactId>
            <version>develop-SNAPSHOT</version>
        </dependency>
    </dependencies>
    ...
</project>

Change the artifact name to hivemq-mqtt-client-shaded to get snapshots of the shaded version.

JitPack works for all branches and also specific commits. Just specify <branch>-SNAPSHOT or the first 10 digits of the commit id in the version.

General principles

  • API and implementation are clearly separated. All classes inside internal packages must not be used directly.
  • The API is mostly fluent and uses fluent builders to create clients, configurations and messages.
  • The API is designed to be consistent:
    • The same principles are used throughout the library.
    • The MQTT 3 and 5 interfaces are as consistent as possible with only version-specific differences.

Creation of clients

Base classes: Mqtt3Client, Mqtt5Client

Mqtt5Client client = MqttClient.builder()
        .identifier(UUID.randomUUID().toString())
        .serverHost("broker.hivemq.com")
        .useMqttVersion5()
        .build();
Mqtt3Client client = MqttClient.builder()...useMqttVersion3().build();

Or if the version is known upfront:

Mqtt5Client client = Mqtt5Client.builder()...build();
Mqtt3Client client = Mqtt3Client.builder()...build();

For each API style exists a specific build...() method.

API flavours

Each API style has its own interface to separate them clearly. At any time it is possible to switch the API style.

Blocking API

  • Builder method: buildBlocking()
  • Switch method: client.toBlocking()

Examples

Subscribe example
final Mqtt5BlockingClient client = Mqtt5Client.builder()
        .identifier(UUID.randomUUID().toString())
        .serverHost("broker.hivemq.com")
        .buildBlocking();

client.connect();

try (final Mqtt5Publishes publishes = client.publishes(MqttGlobalPublishFilter.ALL)) {

    client.subscribeWith().topicFilter("test/topic").qos(MqttQos.AT_LEAST_ONCE).send();

    publishes.receive(1, TimeUnit.SECONDS).ifPresent(System.out::println);
    publishes.receive(100, TimeUnit.MILLISECONDS).ifPresent(System.out::println);

} finally {
    client.disconnect();
}
Publish example
Mqtt5BlockingClient client = Mqtt5Client.builder()
        .identifier(UUID.randomUUID().toString())
        .serverHost("broker.hivemq.com")
        .buildBlocking();

client.connect();
client.publishWith().topic("test/topic").qos(MqttQos.AT_LEAST_ONCE).payload("1".getBytes()).send();
client.disconnect();

Connect

client.connect();

Or with customized properties of the Connect message:

client.connectWith().keepAlive(10).send();

Or with pre-built Connect message:

Mqtt5Connect connectMessage = Mqtt5Connect.builder().keepAlive(10).build();
client.connect(connectMessage);

Publish

client.publishWith()
        .topic("test/topic")
        .qos(MqttQos.AT_LEAST_ONCE)
        .payload("payload".getBytes())
        .send();

Or with pre-built Publish message:

Mqtt5Publish publishMessage = Mqtt5Publish.builder()
        .topic("test/topic")
        .qos(MqttQos.AT_LEAST_ONCE)
        .payload("payload".getBytes())
        .build();
client.publish(publishMessage);

Subscribe

client.subscribeWith().topicFilter("test/topic").qos(MqttQos.EXACTLY_ONCE).send();

Or with pre-built Subscribe message:

Mqtt5Subscribe subscribeMessage = Mqtt5Subscribe.builder()
        .topicFilter("test/topic")
        .qos(MqttQos.EXACTLY_ONCE)
        .build();
client.subscribe(subscribeMessage);

Unsubscribe

client.unsubscribeWith().topicFilter("test/topic").send();

Or with pre-built Unsubscribe message:

Mqtt5Unsubscribe unsubscribeMessage = Mqtt5Unsubscribe.builder().topicFilter("test/topic").build();
client.unsubscribe(unsubscribeMessage);

Consume messages

try (Mqtt5BlockingClient.Mqtt5Publishes publishes = client.publishes(MqttGlobalPublishFilter.ALL)) {
    Mqtt5Publish publishMessage = publishes.receive();
    // or with timeout
    Optional<Mqtt5Publish> publishMessage = publishes.receive(10, TimeUnit.SECONDS);
    // or without blocking
    Optional<Mqtt5Publish> publishMessage = publishes.receiveNow();
}

publishes must be called before subscribe to ensure no message is lost. It can be called before connect to receive messages of a previous session.

Disconnect

client.disconnect();

Or with customized properties of the DISCONNECT message (only MQTT 5):

client.disconnectWith().reasonString("test").send();

Or with pre-built Disconnect message (only MQTT 5):

Mqtt5Disconnect disconnectMessage = Mqtt5Disconnect.builder().reasonString("test").build();
client.disconnect(disconnectMessage);

Reauth (only MQTT 5)

client.reauth();

Async API

  • Builder method: buildAsync()
  • Switch method: client.toAsync()

Examples

Subscribe example
Mqtt5BlockingClient client = Mqtt5Client.builder()
        .identifier(UUID.randomUUID().toString())
        .serverHost("broker.hivemq.com")
        .buildBlocking();

client.connect();

client.toAsync().subscribeWith()
        .topicFilter("test/topic")
        .qos(MqttQos.AT_LEAST_ONCE)
        .callback(System.out::println)
        .send();
Publish example
Mqtt5AsyncClient client = Mqtt5Client.builder()
        .identifier(UUID.randomUUID().toString())
        .serverHost("broker.hivemq.com")
        .buildAsync();

client.connect()
        .thenCompose(connAck -> client.publishWith().topic("test/topic").payload("1".getBytes()).send())
        .thenCompose(publishResult -> client.disconnect());

Connect

connect(), connectWith() and connect(Mqtt3/5Connect) method calls are analog to the Blocking API but return CompletableFuture.

Publish

publishWith() and publish(Mqtt3/5Publish) method calls are analog to the Blocking API but return CompletableFuture.

Subscribe

subscribeWith() and subscribe(Mqtt3/5Subscribe) method calls are analog to the Blocking API but return CompletableFuture.

Additionally messages can be consumed per subscribe:

client.subscribeWith()
        .topicFilter("test/topic")
        .qos(MqttQos.EXACTLY_ONCE)
        .callback(System.out::println)
        .executor(executor) // optional
        .send();

Or with pre-built Subscribe message:

Mqtt5Subscribe subscribeMessage = Mqtt5Subscribe.builder()
        .topicFilter("test/topic")
        .qos(MqttQos.EXACTLY_ONCE)
        .build();
client.subscribe(subscribeMessage, System.out::println);
client.subscribe(subscribeMessage, System.out::println, executor);

Unsubscribe

unsubscribeWith() and unsubscribe(Mqtt3/5Unsubscribe) method calls are analog to the Blocking API but return CompletableFuture.

Consume messages

Messages can either be consumed per subscribe (described above) or globally:

client.publishes(MqttGlobalPublishFilter.ALL, System.out::println);

Or with executing the callback on a specified executor:

client.publishes(MqttGlobalPublishFilter.ALL, System.out::println, executor);

publishes must be called before subscribe to ensure no message is lost. It can be called before connect to receive messages of a previous session.

Disconnect

disconnect(), disconnectWith() and disconnect(Mqtt5Disconnect) method calls are analog to the Blocking API but return CompletableFuture.

Reauth (only MQTT 5)

reauth() method call is analog to the Blocking API but returns CompletableFuture.

Reactive API

  • Builder method: buildRx()
  • Switch method: client.toRx()

Examples

Subscribe example
Mqtt5RxClient client = Mqtt5Client.builder()
        .identifier(UUID.randomUUID().toString())
        .serverHost("broker.hivemq.com")
        .buildRx();

// As we use the reactive API, the following line does not connect yet, but returns a reactive type.
// e.g. Single is something like a lazy and reusable future. Think of it as a source for the ConnAck message.
Single<Mqtt5ConnAck> connAckSingle = client.connect();

// Same here: the following line does not subscribe yet, but returns a reactive type.
// FlowableWithSingle is a combination of the single SubAck message and a Flowable of Publish messages.
// A Flowable is an asynchronous stream that enables backpressure from the application over the client to the broker.
FlowableWithSingle<Mqtt5Publish, Mqtt5SubAck> subAckAndMatchingPublishes = client.subscribeStreamWith()
        .topicFilter("a/b/c").qos(MqttQos.AT_LEAST_ONCE)
        .addSubscription().topicFilter("a/b/c/d").qos(MqttQos.EXACTLY_ONCE).applySubscription()
        .applySubscribe();

// The reactive types offer many operators that will not be covered here.
// Here we register callbacks to print messages when we received the CONNACK, SUBACK and matching PUBLISH messages.
Completable connectScenario = connAckSingle
        .doOnSuccess(connAck -> System.out.println("Connected, " + connAck.getReasonCode()))
        .doOnError(throwable -> System.out.println("Connection failed, " + throwable.getMessage()))
        .ignoreElement();

Completable subscribeScenario = subAckAndMatchingPublishes
        .doOnSingle(subAck -> System.out.println("Subscribed, " + subAck.getReasonCodes()))
        .doOnNext(publish -> System.out.println(
                "Received publish" + ", topic: " + publish.getTopic() + ", QoS: " + publish.getQos() +
                        ", payload: " + new String(publish.getPayloadAsBytes())))
        .ignoreElements();

// Reactive types can be easily and flexibly combined
connectScenario.andThen(subscribeScenario).blockingAwait();
Publish example
Mqtt5RxClient client = Mqtt5Client.builder()
        .identifier(UUID.randomUUID().toString())
        .serverHost("broker.hivemq.com")
        .buildRx();

// As we use the reactive API, the following line does not connect yet, but returns a reactive type.
Completable connectScenario = client.connect()
        .doOnSuccess(connAck -> System.out.println("Connected, " + connAck.getReasonCode()))
        .doOnError(throwable -> System.out.println("Connection failed, " + throwable.getMessage()))
        .ignoreElement();

// Fake a stream of Publish messages with an incrementing number in the payload
Flowable<Mqtt5Publish> messagesToPublish = Flowable.range(0, 10_000)
        .map(i -> Mqtt5Publish.builder()
                .topic("a/b/c")
                .qos(MqttQos.AT_LEAST_ONCE)
                .payload(("test " + i).getBytes())
                .build())
        // Emit 1 message only every 100 milliseconds
        .zipWith(Flowable.interval(100, TimeUnit.MILLISECONDS), (publish, i) -> publish);

// As we use the reactive API, the following line does not publish yet, but returns a reactive type.
Completable publishScenario = client.publish(messagesToPublish)
        .doOnNext(publishResult -> System.out.println(
                "Publish acknowledged: " + new String(publishResult.getPublish().getPayloadAsBytes())))
        .ignoreElements();

// As we use the reactive API, the following line does not disconnect yet, but returns a reactive type.
Completable disconnectScenario = client.disconnect().doOnComplete(() -> System.out.println("Disconnected"));

// Reactive types can be easily and flexibly combined
connectScenario.andThen(publishScenario).andThen(disconnectScenario).blockingAwait();

Connect

connect(), connectWith() and connect(Mqtt3/5Connect) method calls are analog to the Async and Blocking API but return Single<ConnAck>.

Publish

publish takes a reactive stream of Publish messages (Flowable) and returns a reactive stream of Publish results (Flowable).

The Reactive API is usually not used for publishing single messages. Nevertheless it is possible with the following code.

Single<Mqtt5PublishResult> result =
        client.publish(Flowable.just(Mqtt5Publish.builder()
                .topic("test/topic")
                .qos(MqttQos.AT_LEAST_ONCE)
                .payload("payload".getBytes())
                .build())).singleOrError();

Subscribe

subscribeWith() and subscribe(Mqtt3/5Subscribe) method calls are analog to the Async and Blocking API but return Single<SubAck>.

Additionally messages can be consumed per subscribe:

Flowable<Mqtt5Publish> result =
        client.subscribeStreamWith()
                .topicFilter("test/topic")
                .qos(MqttQos.EXACTLY_ONCE)
                .applySubscribe()
                .doOnSingle(subAck -> System.out.println("subscribed"))
                .doOnNext(publish -> System.out.println("received publish"));

Or with pre-built Subscribe message:

Mqtt5Subscribe subscribeMessage = Mqtt5Subscribe.builder()
        .topicFilter("test/topic")
        .qos(MqttQos.EXACTLY_ONCE)
        .build();
Flowable<Mqtt5Publish> result =
        client.subscribeStreamWith(subscribeMessage)
                .doOnSingle(subAck -> System.out.println("subscribed"))
                .doOnNext(publish -> System.out.println("received publish"));

Unsubscribe

unsubscribeWith() and unsubscribe(Mqtt3/5Unsubscribe) method calls are analog to the Async and Blocking API but return Single<UnsubAck>.

Consume messages

Messages can either be consumed per subscribe (described above) or globally:

Flowable<Mqtt5Publish> result =
        client.publishes(MqttGlobalPublishFilter.ALL).doOnNext(System.out::println);

publishes must be called before subscribe to ensure no message is lost. It can be called before connect to receive messages of a previous session.

Disconnect

disconnect(), disconnectWith() and disconnect(Mqtt5Disconnect) method calls are analog to the Async and Blocking API but return Completable.

Reauth (only MQTT 5)

reauth() method call is analog to the Async and Blocking API but returns Completable.

Versioning

Semantic Versioning is used.

All code inside com.hivemq.client.internal packages must not be used directly. It can change at any time and is not part of the public API.

Interfaces annotated with DoNotImplement must not be implemented. The implementation is provided by the library. This allows the library to later add methods to the interface without breaking backwards compatibility with implementing classes.

Contributing

If you want to contribute to HiveMQ MQTT Client, see the contribution guidelines.

License

HiveMQ MQTT Client is licensed under the APACHE LICENSE, VERSION 2.0. A copy of the license can be found here.

More Repositories

1

hivemq-community-edition

HiveMQ CE is a Java-based open source MQTT broker that fully supports MQTT 3.x and MQTT 5. It is the foundation of the HiveMQ Enterprise Connectivity and Messaging Platform
Java
1,049
star
2

hivemq-mqtt-web-client

A websockets based MQTT Client for your browser.
JavaScript
358
star
3

mqtt-cli

MQTT CLI is a useful command line interface for connecting various MQTT clients supporting MQTT 5.0 and 3.1.1
Java
305
star
4

hivemq-edge

HiveMQ Edge is an MQTT gateway that enables interoperability between OT devices and IT systems. It translates diverse protocols into MQTT for streamlined communication and helps organize data into a unified namespace, making managing and streaming data across your infrastructure easier.
Java
103
star
5

hivemq-mqtt-client-dotnet

The HiveMQ C# Asynchronous MQTT client for .NET featuring full MQTT 5.0 and back pressure support.
C#
52
star
6

helm-charts

HiveMQ Helm charts
Java
24
star
7

hivemq-testcontainer

Automatic starting HiveMQ docker containers for JUnit4 and JUnit5 tests. This enables testing MQTT client applications and integration testing of custom HiveMQ extensions.
Java
22
star
8

hivemq-extension-sdk

Open source Extension SDK for the HiveMQ Enterprise MQTT broker that you can use to extend the broker with custom functionality and integrate the broker with other external systems
Java
22
star
9

hivemq-spi

Service Provider Interfaces for Custom Plugin Development for the HiveMQ MQTT Broker
Java
21
star
10

hivemq4-docker-images

Official Docker Images for the Enterprise MQTT Broker HiveMQ
Shell
20
star
11

hivemq-file-rbac-extension

HiveMQ extension for managing role-based authorization
Java
18
star
12

hivemq-prometheus-extension

HiveMQ extension for transferring monitoring data to Prometheus
Java
16
star
13

hivemq-mqtt-message-log-extension

The HiveMQ MQTT Message Log Extension provides the possibility to follow up on any clients communicating with the broker on the terminal.
Java
14
star
14

hivemq-examples

Java
13
star
15

hivemq-google-cloud-pubsub-extension-customization-sdk

Open source Customization SDK for the HiveMQ Enterprise Extension for Google Cloud Pub/Sub that you can use to customize the extension and enrich your data transfer between MQTT and Google Cloud Pub/Sub.
Java
11
star
16

hivemq-influxdb-extension

HiveMQ extension for transferring monitoring data to the time series database InfluxDB
Java
11
star
17

hivemq-hello-world-extension

HiveMQ extension for demonstrating the HiveMQ extension system
Java
11
star
18

hivemq-database-example-plugin

This is an example plugin which shows how to use the HiveMQ MQTT broker together with a database (MySQL in this case). Shows authentication and message persistence
Java
10
star
19

hivemq-dns-cluster-discovery-extension

HiveMQ extension for elastic, cloud-native clustering with Docker, Kubernetes and Openshift via DNS discovery
Java
10
star
20

hivemq-s3-cluster-discovery-extension

HiveMQ extension for dynamic clustering with AWS S3 discovery
Java
9
star
21

hivemq-deny-wildcard-extension

HiveMQ extension for denying subscriptions to the root wildcard
Java
7
star
22

x509-client-cert-hivemq-example-plugin

X509 client certificate example HiveMQ MQTT broker plugin
Java
7
star
23

hivemq-policy-cookbooks

Collection of easy-to-use data and behavior policies for HiveMQ Data Hub
JavaScript
7
star
24

file-auth-plugin

This plugin reads username & password from a property file and allows access to HiveMQ only for MQTT clients with correct credentials.
Java
7
star
25

hivemq-sparkplug-aware-extension

HiveMQ Sparkplug aware extension that provides a Sparkplug Aware Broker.
Java
7
star
26

hivemq-sparkplug-influxdb-extension

Sparkplug extension, that enables you to monitor device and edge node data in an IIoT Sparkplug environment.
Java
7
star
27

hivemq-kafka-extension-customization-sdk

Open source Customization SDK for the HiveMQ Enterprise Extension for Kafka that you can use to customize the extension and enrich your data transfer between MQTT and Kafka.
Java
7
star
28

hivemq-extension-gradle-plugin

A Gradle plugin to ease the development of HiveMQ extensions
Kotlin
7
star
29

hivemq-azure-cluster-discovery-extension

HiveMQ extension for dynamic clustering with Azure Blob Storage discovery.
Java
6
star
30

mosquitto2hivemq

A smart migration tool to migrate your configuration and persistent connections from Mosquitto to the HiveMQ Enterprise MQTT Broker.
Java
6
star
31

hivemq-maven-plugin

Maven plugin which enables starting and debugging a developed plugin on the HiveMQ MQTT broker
Java
6
star
32

mqtt-message-log

The MQTT Message Log plugin for the HiveMQ MQTT broker logs all client actions the standard HiveMQ logger.
Java
6
star
33

hivemq-kafka-hello-world-customization

An example customization project for the HiveMQ Enterprise Extension for Kafka using the HiveMQ Kafka Extension Customization SDK.
Java
6
star
34

hivemq-docker-images

This repository contains the Dockerfiles for the HiveMQ 3 Base image and HiveMQ 3 DNS Discovery image, as found at https://hub.docker.com/r/hivemq/hivemq3/
Dockerfile
6
star
35

hivemq-allow-all-extension

HiveMQ extension for allowing all MQTT clients to connect to HiveMQ
Java
5
star
36

hivemq-sys-topic-plugin

This HiveMQ plugin enables MQTT $SYS topics in HiveMQ. It can be easily removed or switched by any of your favorite monitoring interfaces.
Java
5
star
37

hivemq-swarm-extension-sdk

Open source Extension SDK for HiveMQ Swarm that you can use to extend it with custom functionality and integrate it with other external systems
Java
5
star
38

hivemq-heartbeat-extension

HiveMQ extension for integration with load balancers and proxies
Java
5
star
39

hivemq-spring-example-plugin

Example Plugin for the MQTT broker HiveMQ to demonstrate the usage of Spring inside Plugins
Java
5
star
40

hivemq-authentication-example

This repository contains sample callbacks that show how you can implement your custom authentication logic in the HiveMQ MQTT broker
Java
5
star
41

jvm-metrics-plugin

The HiveMQ JVM Metrics Plugin adds several additional metrics based on the Java Virtual Machine to HiveMQ's metrics
Java
4
star
42

distributed-mqtt-editor

TypeScript
4
star
43

hivemq-swarm-hello-world-extension

HiveMQ Swarm extension for demonstrating the HiveMQ Swarm extension system
Java
4
star
44

influxdb-monitoring-plugin

A HiveMQ plugin that reports metrics to InfluxDB for monitoring purposes
Java
4
star
45

hivemq-stormpath-plugin

A HiveMQ Plugin which uses the Stormpath User Management API for easy to setup authentication and permission management of MQTT clients
Java
4
star
46

hivemq-hello-world-plugin

A Hello World Plugin for getting started with plugin development for the HiveMQ MQTT broker
Java
4
star
47

graphite-plugin

HiveMQ Graphite Plugin
Java
3
star
48

hivemq-grafana-dashboards

3
star
49

hivemq-authorization-blacklist-whitelist-example

An example plugin for the HiveMQ MQTT Broker which shows how to use blacklist and whitelist approaches for authorization.
Java
3
star
50

deny-wildcard-plugin

A plugin for the HiveMQ MQTT broker which denies all subscriptions to "#" and disconnects the client
Java
3
star
51

MQTTgo-v2

This repo holds the code for a ESP32 MQTT demo setup
C
3
star
52

prometheus-monitoring-plugin

A HiveMQ plugin that exposes metrics to Prometheus for monitoring purposes
Java
3
star
53

s3-cluster-discovery-plugin

HiveMQ S3 Discover Plugin - Adds cluster node discovery via AWS S3 to HiveMQ
Java
3
star
54

hivemq-edge-extension-sdk

Extension SDK for HiveMQ Edge
Java
3
star
55

hivemq-aws-cloudwatch-extension

HiveMQ extension for transferring monitoring data to AWS CloudWatch
Java
3
star
56

hivemq-delete-retained-messages-recursively-plugin

The MQTT Delete Retained Messages Recursively Plugin is a small HiveMQ plugin, meant to demonstrate the functionality of the Retained Message Store Service. It enables a client to delete the retained message of a topic and the retained messages of all it's subtopic at once.
Java
3
star
57

homebrew-mqtt-cli

This is the official Homebrew tap for MQTT CLI
Ruby
3
star
58

hivemq-google-cloud-pubsub-hello-world-customization

An example customization project for the HiveMQ Enterprise Extension for Google Cloud Pub/Sub using the HiveMQ Google Cloud Pub/Sub Extension Customization SDK.
Java
3
star
59

hivemq-mqtt-spring-boot-starter

A Spring Boot Starter to integrate the awesome HiveMQ MQTT Client SDK into your Spring Boot application
Java
3
star
60

access-log-plugin

The access log plugin for the HiveMQ MQTT broker writes all relevant client actions to a file.
Java
2
star
61

hivemq-amazon-kinesis-extension-customization-sdk

Java
2
star
62

file-auth-plugin-utility

This neat utility helps to manage the credential file of the File Authentication Plugin. For example it can add, update and remove users using all properties from the fileAuthConfiguration.properties
Java
2
star
63

hivemq-jmx-plugin

This plugin enables JMX monitoring for the HiveMQ enterprise broker.
Java
2
star
64

hivemq-rest-example-plugin

Example plugin for HiveMQ to demonstrate the RESTService
Java
2
star
65

article-java-mqtt-stack

Sample code for building a full stack MQTT solution with open source components
Java
2
star
66

hivemq-dns-cluster-discovery-plugin

A HiveMQ Cluster Discovery Plugin for cluster node discovery via DNS. Useful for elastic deployments in Kubernetes, Docker Swarm and Mesos
Java
2
star
67

dcos-service

A framework for running HiveMQ on DC/OS.
Java
1
star
68

terraform-blog

Repository for blog post: Automate your HiveMQ installation with Concourse and Terraform
HCL
1
star
69

hivemq-HAproxy

a technology demonstrator where we setup a 3 node HiveMQ cluster along with a HA proxy that acts as a load balancer and single IP entrypoint to the cluster
Shell
1
star
70

elastic-beam-plugin

The HiveMQ plugin that integrates with the Elastic Beam load balancer for secure and scalable MQTT deployments
Java
1
star
71

http-heartbeat-plugin

This repository contains the HiveMQ heart-beat-plugin, which can be used to provide an HTTP heath-check for any application load balancer
Java
1
star