hivemq/hivemq-community-edition
GitHub: hivemq/hivemq-community-edition
HiveMQ CE 是一个基于 Java 的开源 MQTT 消息代理,完整实现 MQTT 3.x 和 5.0 协议,为物联网设备提供可靠的消息路由与通信能力。
Stars: 1203 | Forks: 286
++++
* 文档:
* 社区论坛:
* 贡献指南:link:CONTRIBUTING.adoc[Contributing.adoc]
* 许可证:本仓库中的源文件基于 link:LICENSE[Apache License Version 2.0] 发布。
== 功能特性
* 包含所有 MQTT 3.1、3.1.1 和 MQTT 5.0 功能
* 支持基于 TCP、TLS、WebSocket 和 Secure WebSocket 传输的 MQTT
* Java Extension SDK 支持:
** 认证
** 授权
** 客户端初始化
** MQTT 数据包拦截器
** 与发布、保留消息、客户端和订阅进行交互
* 可在 Windows、Linux 和 MacOS 上运行(推荐使用 Linux)
* 嵌入式模式
HiveMQ CE 兼容所有的 MQTT 3 和 MQTT 5 客户端,包括 Eclipse Paho 和 [HiveMQ MQTT Client]。
== 文档
HiveMQ CE 的文档可以在 [这里] 找到。
MQTT 资源
* [MQTT Essentials]
* [MQTT 5 Essentials]
== HiveMQ 社区论坛
如果您对 HiveMQ 社区版有任何疑问或想进行讨论,我们全新的 [HiveMQ 社区论坛] 是理想的地方。
== 如何使用
=== 快速开始
* 下载最新的 [HiveMQ CE 二进制包]。
* 解压该压缩包。
* 运行压缩包 bin 文件夹中的 run.sh (Linux/OSX) 或 run.bat (Windows)。
[source,bash]
----
cd hivemq-ce-
bin/run.sh
----
[IMPORTANT]
====
运行 HiveMQ CE 至少需要 Java 11 版本。
编译该项目并运行测试至少需要 Java 21 版本。
如果您不确定,可以在命令行中输入 `java -version` 来检查已安装的 Java 版本。
====
您现在可以将 MQTT 客户端连接到 `:1883`。
[CAUTION]
====
如果您想将外部网络上的设备连接到 HiveMQ CE,请确保您的服务器可以从这些网络访问,并且所需的端口(默认:1883)可以通过防火墙访问。
====
=== 即时构建
有关此仓库当前分支以及特定提交的即时构建版本可在 [这里] 获取。
=== 使用 Docker 运行
所有版本以及 `master` 分支的当前状态均可在 DockerHub 上的 [hivemq/hivemq-ce] 仓库中找到。
要运行此镜像,只需执行以下命令:
[source,bash]
----
docker run --name hivemq-ce -d -p 1883:1883 hivemq/hivemq-ce
----
要更改默认的日志级别,您可以在运行容器时设置环境变量 `HIVEMQ_LOG_LEVEL`:
[source,bash]
----
docker run --name hivemq-ce -e HIVEMQ_LOG_LEVEL=INFO -d -p 1883:1883 hivemq/hivemq-ce
----
=== 从源码构建
==== 构建二进制包
检出 Git 仓库并构建二进制包。
[source,bash]
----
git clone https://github.com/hivemq/hivemq-community-edition.git
cd hivemq-community-edition
./gradlew hivemqZip
----
软件包 `hivemq-ce-.zip` 将创建在子文件夹 `build/distributions/` 中。
==== 构建 Docker 镜像
检出 Git 仓库并构建 Docker 镜像。
[source,bash]
----
git clone https://github.com/hivemq/hivemq-community-edition.git
cd hivemq-community-edition
./gradlew loadOciImage
----
将在本地创建 Docker 镜像 `hivemq/hivemq-ce:snapshot`。
有关更多开发说明,请参阅 link:CONTRIBUTING.adoc[贡献指南]。
=== 嵌入式模式
HiveMQ 社区版提供了一种嵌入式模式和编程 API,以便与 Java/Java EE 软件进行集成。
==== Gradle
如果您使用 Gradle,请将以下代码包含在您的 `build.gradle(.kts)` 文件中。
[source,groovy]
----
dependencies {
implementation("com.hivemq:hivemq-community-edition-embedded:2026.5")
}
----
==== Maven
如果您使用 Maven,请将以下代码包含在您的 `pom.xml` 文件中。
[source,xml]
----
...
com.hivemq
hivemq-community-edition-embedded
2026.5
...
----
NOTE: 您必须将编译器版本设置为 `11` 或更高。
==== 用法
通过 `com.hivemq.embedded.EmbeddedHiveMQBuilder` 进入嵌入式模式。
[source,java]
----
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"));
...
}
```
}
----
构建完成后,可以使用 `start()` 启动 EmbeddedHiveMQ。
[source,java]
----
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();
}
}
```
}
----
正在运行的 EmbeddedHiveMQ 可以使用 `stop()` 停止。
[source,java]
----
public class Main {
```
public static void main(String[] args) {
...
try (final EmbeddedHiveMQ hiveMQ = embeddedHiveMQBuilder.build()) {
...
hiveMQ.stop().join();
} catch (final Exception ex) {
ex.printStackTrace();
}
}
```
}
----
与嵌入式的 HiveMQ 类似,可以使用 `com.hivemq.embedded.EmbeddedExtensionBuilder` 构建嵌入式 extension。
然后将该嵌入式 extension 添加到嵌入式 HiveMQ 构建器中。
[source,java]
----
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: EmbeddedHiveMQ 是一种类似于网络连接的资源,它实现了 `java.lang.AutoCloseable` 接口。
请务必使用 ARM (_try-with-resources_) 机制,或者确保调用 `close()`。
==== 排除依赖
当您部署包含 EmbeddedHiveMQ 的应用程序时,排除某些依赖项可能会很有用。
排除依赖的一种方法是使用 [maven shade plugin]。
[source,xml]
----
...
org.apache.maven.plugins
maven-shade-plugin
3.2.1
package
shade
org.rocksdb:rocksdbjni
ch.qos.logback:logback-classic
*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA
...
----
===== 排除 RocksDB
要排除 `org.rocksdb:rocksdbjni` 依赖项,必须在调用 `start()` 之前更改两个内部配置。
[source,java]
----
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();
}
}
```
}
----
// Scarf 跟踪像素
== 贡献
如果您想为 HiveMQ CE 做贡献,请参阅 link:CONTRIBUTING.adoc[贡献指南]。
== 许可证
HiveMQ 社区版基于 `APACHE LICENSE, VERSION 2.0` 许可。
许可证副本可在 link:LICENSE[这里] 找到。
== 贡献
如果您想为 HiveMQ CE 做贡献,请参阅 link:CONTRIBUTING.adoc[贡献指南]。
== 许可证
HiveMQ 社区版基于 `APACHE LICENSE, VERSION 2.0` 许可。
许可证副本可在 link:LICENSE[这里] 找到。标签:JS文件枚举, MQTT Broker, 便携式工具, 后台面板检测, 域名枚举, 消息中间件, 物联网, 请求拦截, 通信架构