Git Product home page Git Product logo

iq-scm / hivemq-community-edition Goto Github PK

View Code? Open in Web Editor NEW

This project forked from hivemq/hivemq-community-edition

0.0 0.0 0.0 12.08 MB

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

Home Page: https://www.hivemq.com

License: Apache License 2.0

Shell 0.22% Java 99.20% Kotlin 0.23% HTML 0.20% Batchfile 0.11% Dockerfile 0.03%

hivemq-community-edition's Introduction

HiveMQ Community Edition

Maven Central JitPack javadoc GitHub Workflow Status (with branch)

HiveMQ CE is a Java-based open source MQTT broker that fully supports MQTT 3.x and MQTT 5.

HiveMQ CE is the foundation of the HiveMQ enterprise-connectivity and messaging platform and implements all MQTT features. This project is the technical core of many large MQTT deployments and is now available as open source software under the Apache 2 license.

Features

  • All MQTT 3.1, 3.1.1 and MQTT 5.0 features

  • MQTT over TCP, TLS, WebSocket and Secure WebSocket transport

  • Java Extension SDK for:

    • Authentication

    • Authorization

    • Client Initializers

    • MQTT Packet Interceptors

    • Interacting with Publishes, Retained Messages, Clients and Subscriptions

  • Running on Windows, Linux and MacOS (Linux is recommended)

  • Embedded Mode

HiveMQ CE is compatible with all MQTT 3 and MQTT 5 clients, including Eclipse Paho and HiveMQ MQTT Client.

Documentation

The documentation for the HiveMQ CE can be found here.

MQTT Resources

HiveMQ Community Forum

The ideal place for questions or discussions about the HiveMQ Community Edition is our brand new HiveMQ Community Forum.

How to Use

Quick Start

  • Download the latest HiveMQ CE binary package.

  • Unzip the package.

  • Run the run.sh (Linux/OSX) or run.bat (Windows) in the bin folder of the package.

cd hivemq-ce-<version>
bin/run.sh
Important
At least Java version 11 is required to run HiveMQ CE. If you are in doubt, you can check the installed Java version by entering java -version on your command line.

You can now connect MQTT clients to <ip address>:1883.

Caution
If you want to connect devices on external networks to HiveMQ CE, please make sure your server is reachable from those networks and the required ports (default: 1883) are accessible through your firewall.

Just in Time Builds

Just in time builds for current branches on this repository and for specific commits are available here.

Run with Docker

All releases as well as the current state of the master branch are available in the hivemq/hivemq-ce repository on DockerHub. To execute this image, simply run the following command:

docker run --name hivemq-ce -d -p 1883:1883 hivemq/hivemq-ce

To change the default log level you can set the environment variable HIVEMQ_LOG_LEVEL when running the container:

docker run --name hivemq-ce -e HIVEMQ_LOG_LEVEL=INFO -d -p 1883:1883 hivemq/hivemq-ce

Building from Source

Building the Binary Package

Check out the git repository and build the binary package.

git clone https://github.com/hivemq/hivemq-community-edition.git

cd hivemq-community-edition

./gradlew hivemqZip

The package hivemq-ce-<version>.zip is created in the sub-folder build/distributions/.

Building the Docker Image

Check out the git repository and build the Docker image.

git clone https://github.com/hivemq/hivemq-community-edition.git

cd hivemq-community-edition

docker/build.sh

The Docker image hivemq/hivemq-ce:snapshot is created locally.

For further development instructions see the contribution guidelines.

Embedded Mode

HiveMQ Community Edition offers an embedded mode and a programmatic API for integrating with Java/Java EE software.

Gradle

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

dependencies {
    implementation("com.hivemq:hivemq-community-edition-embedded:2023.3")
}

Maven

If you use Maven, include the following code in your pom.xml file.

<project>
    ...
    <dependencies>
        <dependency>
            <groupId>com.hivemq</groupId>
            <artifactId>hivemq-community-edition-embedded</artifactId>
            <version>2023.3</version>
        </dependency>
    </dependencies>
    ...
</project>
Note
You must set the compiler version to 11 or higher.

Usage

Entry into the embedded mode is done with the com.hivemq.embedded.EmbeddedHiveMQBuilder.

public class Main {

    public static void main(String[] args) {

        final EmbeddedHiveMQBuilder embeddedHiveMQBuilder = EmbeddedHiveMQ.builder()
            .withConfigurationFolder(Path.of("/path/to/embedded-config-folder"))
            .withDataFolder(Path.of("/path/to/embedded-data-folder"))
            .withExtensionsFolder(Path.of("/path/to/embedded-extensions-folder"));
        ...
    }
}

Once built, an EmbeddedHiveMQ can be started with start().

public class Main {

    public static void main(String[] args) {
        final EmbeddedHiveMQBuilder embeddedHiveMQBuilder = EmbeddedHiveMQ.builder();
        ...

        try (final EmbeddedHiveMQ hiveMQ = embeddedHiveMQBuilder.build()) {
            hiveMQ.start().join();
            ...
        } catch (final Exception ex) {
            ex.printStackTrace();
        }
    }
}

A running EmbeddedHiveMQ can be stopped with stop().

public class Main {

    public static void main(String[] args) {

        ...

        try (final EmbeddedHiveMQ hiveMQ = embeddedHiveMQBuilder.build()) {
            ...
            hiveMQ.stop().join();
        } catch (final Exception ex) {
            ex.printStackTrace();
        }
    }
}

Similar to the embedded HiveMQ an embedded extension can be built with the com.hivemq.embedded.EmbeddedExtensionBuilder.

Then add the embedded extension to the embedded HiveMQ builder.

public class Main {

    public static void main(String[] args) {

        final EmbeddedExtension embeddedExtension = EmbeddedExtension.builder()
                .withId("embedded-ext-1")
                .withName("Embedded Extension")
                .withVersion("1.0.0")
                .withPriority(0)
                .withStartPriority(1000)
                .withAuthor("Me")
                .withExtensionMain(new MyEmbeddedExtensionMain())
                .build();

        final EmbeddedHiveMQBuilder builder = EmbeddedHiveMQ.builder()
                .withConfigurationFolder(Path.of("/path/to/embedded-config-folder"))
                .withDataFolder(Path.of("/path/to/embedded-data-folder"))
                .withExtensionsFolder(Path.of("/path/to/embedded-extensions-folder"))
                .withEmbeddedExtension(embeddedExtension);

        try (final EmbeddedHiveMQ hiveMQ = builder.build()) {
            hiveMQ.start().join();
            //do something with hivemq
        } catch (final Exception ex) {
            ex.printStackTrace();
        }
    }

    private static class MyEmbeddedExtensionMain implements ExtensionMain {

        @Override
        public void extensionStart(final @NotNull ExtensionStartInput extensionStartInput, final @NotNull ExtensionStartOutput extensionStartOutput) {
            // my extension start code
        }

        @Override
        public void extensionStop(final @NotNull ExtensionStopInput extensionStopInput, final @NotNull ExtensionStopOutput extensionStopOutput) {
            // my extension stop code
        }
    }
}
Note
An EmbeddedHiveMQ is a resource that is similar to a e.g. network connection and implements the java.lang.AutoCloseable interface. Always use ARM (try with resources) or ensure a call to close().

Exclusions

When you deploy an application that includes EmbeddedHiveMQ, it can be useful to exclude some dependencies. One way to exclude dependencies is with the maven shade plugin.

<project>
...
 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <artifactSet>
                                <excludes>
                                    <!--Exclude the undesired dependencies-->
                                    <exclude>org.rocksdb:rocksdbjni</exclude>
                                    <exclude>ch.qos.logback:logback-classic</exclude>
                                </excludes>
                            </artifactSet>
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
...
</project>
RocksDB Exclusion

To exclude the org.rocksdb:rocksdbjni dependency, two internal configurations must be changed before you call start().

public class Main {

    public static void main(String[] args) {

        ...

        try (final EmbeddedHiveMQ hiveMQ = embeddedHiveMQBuilder.build()) {

            InternalConfigurations.PAYLOAD_PERSISTENCE_TYPE.set(PersistenceType.FILE);
            InternalConfigurations.RETAINED_MESSAGE_PERSISTENCE_TYPE.set(PersistenceType.FILE);

            hiveMQ.start().join();

            ...
        } catch (final Exception ex) {
            ex.printStackTrace();
        }
    }
}

Contributing

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

License

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

hivemq-community-edition's People

Contributors

a-imal avatar busybeetree avatar cihanucar avatar dc2-danielkrueger avatar dobermai avatar donnerbart avatar fibrefox avatar florian-limpoeck avatar fraschbi avatar gitseti avatar hlohse avatar iskerrett avatar lbrandl avatar mario-schwede-hivemq avatar michaelg9 avatar micwalter avatar pglombardo avatar remit avatar rhinobetatron avatar robinatherton avatar sauroter avatar sbaier1 avatar schaebo avatar sgtsilvio avatar yannickweber avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.