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();
}
});
答案 0 :(得分:1)
我不熟悉阿波罗,但我同意这种行为听起来不正确。您可以尝试对另一个代理进行测试以查看它是否按预期工作,然后在必要时向Apollo提交错误。
您可以使用例如test.mosquitto.org:1883测试,或使用mqtt.org/software上列出的其他公开的