1

https://github.com/fusesource/mqtt-client

我有一个启动后台服务的 android 应用程序,在该服务中我启动了与 apollo 代理的 mqtt 连接。当调用 startService 时,我从 onStartCommand 设置主机名、端口用户名、密码等启动 MQTT。然后

connection = mqtt.callbackConnection();

连接成功,我可以清楚地看到我的主题“uniqueId”有一个消费者。

但是当我向我的主题发送消息时,侦听器从不调用onPublish .. 另一个奇怪的情况是,如果我失去与代理的连接,例如,我关闭代理以便活动连接断开,当 mqtt-client重新连接,它似乎调用了侦听器和 onPublish,因为这样我堆积在我的持久订阅者主题上的所有消息都被传递了..我在这里遗漏了关于侦听器的任何内容吗?

不是因为connection.subscribe而主动消费主题吗?

Topic[] topics = { new Topic("uniqueId", QoS.AT_LEAST_ONCE) };
connection.subscribe(topics, new Callback<byte[]>() {
    public void onSuccess(byte[] qoses) {
    }
    public void onFailure(Throwable value) {
        value.printStackTrace();
    }
});

connection.listener(new Listener() {
    @Override
    public void onConnected() {
    }
    @Override
    public void onDisconnected() {
    }
    @Override
    public void onFailure(Throwable value) {
    }
    @Override
    public void onPublish(UTF8Buffer topic, Buffer payload, Runnable ack) {
        ack.run();
    }
});
4

1 回答 1

1

我不熟悉 Apollo,但我同意这种行为听起来不正确。您可以尝试对另一个代理进行测试以查看它是否按预期工作,然后在必要时针对 Apollo 提交错误。

您可以使用例如 test.mosquitto.org:1883 进行测试,或使用 mqtt.org/software 上列出的其他公共之一

于 2013-09-22T18:16:43.960 回答