问题标签 [hivemq]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
976 浏览

java - 如何正确连接 HiveMQ 中的身份验证?

我正在尝试使用 HiveMQ 将客户端连接到具有简单身份验证的服务器。在 HiveMQ 客户端上,我创建了一个客户端并使用connectWith()指定我想通过简单身份验证进行连接。当我输入用户名和密码时,我得到了一个MqttClientStateException我留在下面的。我是否应该在服务器上手动存储/配置用户名和密码,因为我刚刚输入了一个username并且password喜欢这里的教程:

https://hivemq.github.io/hivemq-mqtt-client/docs/mqtt_operations/connect.html#authenticationauthorization

代码:

例外:

0 投票
1 回答
1442 浏览

java - 如何在 HiveMQ 客户端中正确使用 SSL 配置?(MQTT)

我创建了一个客户端来使用安全连接和加密有效负载进行测试,因此我想使用默认的 SSL 配置。我试图这样做,但我ConnectionClosedException立即得到了一个和服务器。我应该在服务器上配置一些东西吗?我在下面留下了代码和异常。

HiveMQ:

https://github.com/hivemq/hivemq-community-edition https://github.com/hivemq/hivemq-mqtt-client

代码:

例外:

0 投票
1 回答
50 浏览

java - 有没有更好的方法来获得更精确的跨线程时间?

我正在使用 HiveMQ,每个线程都有两个客户端,并且我有一个启动这两个线程的主线程。我一直在System.nanoTime()对发送(对于一个线程)和接收(对于另一个线程)进行计时,因此我可以将这些值相加以获得发送和接收给定数量的消息的总时间。我在 Java 中使用了 synchronized 块,wait()以便notify()计时器几乎在同一时间启动,因为一个线程必须唤醒另一个线程。我最后一次发送和接收的时间似乎在0-350 毫秒之间变化当我运行我的程序时,自然会发送和接收 15 条消息。对于上下文,服务器和客户端使用 localhost 作为服务器地址在同一台机器上运行。无论如何我可以在我的线程中获得更精确的时间(变化更小)?我想获得尽可能高的精度。

订阅者(发送客户端)的代码:

Publisher(发布客户端)的代码:

0 投票
1 回答
209 浏览

java - 如何获取 HiveMQ 客户端中使用的密码套件?

我将 HiveMQ 服务器配置为识别 TLS 并创建了 TLS 通信。我想打印出正在使用的密码套件。我使用了 getSslConfig() 但我最终将其作为输出:

Optional[com.hivemq.client.internal.mqtt.MqttClientSslConfigImpl@2710]

我知道有一种getCipherSuites()方法,MqttClientSslConfig.java但我一直无法找到使用它的方法。作为后续行动,我将如何指定使用特定的密码套件?到目前为止,我一直在使用默认的,如下所示:

代码(如何指定特定的密码套件?):

代码(我一直在尝试获取 SSL 配置):

0 投票
2 回答
2031 浏览

java - 如何在 HiveMQ 中正确使用 TLS 1.3 密码套件?(获取 SSL 异常:在接收对等方的 close_notify 之前关闭入站)

我想使用 TLS 1.3 与 HiveMQ 进行安全通信。我已将 HiveMQ 社区版服务器config.xml文件配置为指定使用 TLS 1.3 密码套件,并使用曲线将其指向包含 256 位椭圆曲线密钥(EC NOT DSA)的密钥对的密钥库:(secp256r1这是一个TLS 1.3 支持的少数曲线)。256 位密钥对适用于我要使用的 TLS 1.3 密码套件:TLS_AES_128_GCM_SHA256. 我还生成了一个 384 位椭圆曲线密钥,TLS_AES_256_GCM_SHA384但我只关注TLS_AES_128_GCM_SHA256如果我让 AES 128 工作,AES 256 套件将工作。我已经为这两个密钥对生成了证书,并将它们都cacerts放在JAVA HOME Folder. 我仍然收到 javax.net.ssl.SSLHandshakeException:

javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify

我试过使用这个 TLS 1.2 密码套件:(TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256使用适当的证书)并且它没有任何问题,所以这个问题似乎是 TLS 1.3 的。我的项目在Java 12.0.1. 我注意到虽然 HiveMQ 服务器识别了 TLSv1.3,但它启用了 TLSv1.2 协议,但没有说它启用了任何 TLSv1.3 密码套件。我是否需要以某种方式在 HiveMQ 中手动启用 TLSv1.3 密码套件,因为即使在指定特定协议时它们看起来也没有打开?我在下面留下了服务器控制台输出的副本以及 Java 代码和异常。


更新:我已经指定客户端使用 TLS1.3.protocols()sslConfig. 我尝试手动将密码套件:添加TLS_AES_128_GCM_SHA256到 config.xml 文件,但这次我收到 SSL 异常错误。更新的输出和异常如下。我怀疑 HiveMQ 正在过滤掉我正在尝试使用的密码套件。我尝试创建一个 SSL 引擎作为测试并使用它.getEnabledCipherSuites()getSupportedCipherSuites()它说我的 JVM 以及 TLS1.3 协议本身支持上面的 TLS 1.3 密码套件。

HiveMQ 服务器控制台输出(来自run.sh启用了 DEBUG 的文件logback.xml):

Java 代码:

异常(使用 Ssl 调试工具:-Djavax.net.debug=ssl):

0 投票
0 回答
109 浏览

mqtt - HiveMQ 代理的开源自动扩展

我正在尝试在 ubuntu 上配置高度可扩展的 HiveMQ 代理(商业版)。我有 3 台服务器:服务器 A、服务器 B 和服务器 C。在服务器 A 上配置 Ha-proxy 用于负载平衡。在服务器 B 上配置了蚊子代理。在服务器 C 上配置了蚊子代理。服务器 B 和 C 已订阅 HA 代理(服务器 A)。

我担心的是,当来自客户端的消息在某个时候变得很高时,单个代理无法一次处理那么多消息。

我只希望当客户端发布高于限制的消息时,另外一个 hiveMq 代理会自行启动并作为另一个节点工作。不应在两个代理上写入相同的消息。像 AWS 中的自动缩放。

0 投票
1 回答
255 浏览

java - 如何在 HiveMQ Client 中获取客户端的 QoS?

我正在使用 HiveMQ 客户端,我想知道是否有办法获得客户端订阅的服务质量 (QoS)(就特定主题或一般而言)?我会寻找一种可以在客户端上调用的方法,如下所示:

我只想要这些信息,以便可以打印到控制台。

0 投票
1 回答
164 浏览

java - HiveMQ Prometheus 扩展 NoClassDefFoundError。无法启动扩展

我正在运行 hivemq mqtt 代理社区版,并想添加 prometheus 扩展以进行监控。
两者都是从hivemq 市场github 项目页面预编译的。
我将这两个组件下载为 zip 文件,解压缩并使用此 dockerfile 将它们复制到 java 11 docker 容器中:

我想我从正确的方法中得到了步骤,但是当我启动容器时docker build -t hive-test .; docker run -p 1883:1883 -p 9399:9399 -t hive-test出现错误。

我还下载了代理和扩展源代码,并尝试使用 maven/gradle 和 java 11 自己编译它。但结果完全相同。

代理运行没有任何错误。

有谁知道这里出了什么问题?

0 投票
1 回答
1846 浏览

mqtt - 使用通配符订阅 MQTT 主题

我有一个想要订阅以下主题的 MQTT 客户端

  1. 节点1/数据/更新
  2. 节点1/数据/增量
  3. 节点1/数据

当然我有多个节点,所以我必须使用通配符,如下所述:https ://www.hivemq.com/blog/mqtt-essentials-part-5-mqtt-topics-best-practices/

我尝试了以下主题名称

  1. +/数据/+
  2. +/数据/#
  3. +/data#(我很绝望)

使用上面的表达式 1 和 2,我没有收到主题 node1/data 的消息。

有没有办法通过一次订阅来做到这一点?

0 投票
1 回答
918 浏览

mqtt - HiveMQ MQTT 客户端 - 在自动重新连接时重新订阅主题

我在 Spring 中使用 HiveMQ MQTT 客户端来接收 MQTT 消息。

我的客户端配置如下所示

客户端可用后,使用客户端初始化另一个 Spring Bean。它订阅了一个主题:

我多次看到没有更多消息传递到我的应用程序,而我仍然能够使用客户端连接发送消息(因此当时它已连接)。

我找不到有关 HiveMQ MQTT 客户端如何处理配置的automaticReconnectWithDefaultConfig(). 谁能指出,我创建的订阅是否subscribeTopic()被重新订阅?我还找到了addSubscription()可以替换.topicFilter(..).qos(...)零件的方法。我也找不到任何信息,这是否会使订阅对连接丢失更具弹性。

我将不胜感激有关该主题的任何信息。

谢谢。