Mqtt HiveMQ Java阻止客户端订阅服务器未使用任何消息

Mqtt HiveMQ Java阻止客户端订阅服务器未使用任何消息,mqtt,hivemq,Mqtt,Hivemq,我正在使用HiveMQ Java客户端连接到HiveMQ代理。阻止客户端订阅服务器未使用任何消息。使用MQTTBox,发布和订阅工作正常。这是代码。我在跟踪 Maven依赖项: <!-- MQTT Client --> <dependency> <groupId>com.hivemq</groupId> <artifactId>hivemq-mqtt-client</artifactId

我正在使用HiveMQ Java客户端连接到HiveMQ代理。阻止客户端订阅服务器未使用任何消息。使用MQTTBox,发布和订阅工作正常。这是代码。我在跟踪

Maven依赖项:

<!-- MQTT Client -->      
<dependency>
        <groupId>com.hivemq</groupId>
        <artifactId>hivemq-mqtt-client</artifactId>
        <version>1.0.0</version>
</dependency> 

com.hivemq
hivemq mqtt客户端
1.0.0

我错过什么了吗?任何指针都会非常有用。

您必须先订阅,然后才能接收消息

Publishes.receive是一个阻塞操作,因此它会等待直到收到消息。 您是在接收操作后订阅的。 你应该这样做:

Mqtt3BlockingClient client = Mqtt3Client.builder()
        .identifier("sub")
        .serverHost("hostaddress")
        .serverPort(1883)
        .buildBlocking();

client.connect();

try (final Mqtt3BlockingClient.Mqtt3Publishes 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);
}
Mqtt3BlockingClient client = Mqtt3Client.builder()
        .identifier("sub")
        .serverHost("hostaddress")
        .serverPort(1883)
        .buildBlocking();

client.connect();

try (final Mqtt3BlockingClient.Mqtt3Publishes 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);
}