带有 apollo 的 android mqtt-client-1.5 监听器

Posted

技术标签:

【中文标题】带有 apollo 的 android mqtt-client-1.5 监听器【英文标题】:android mqtt-client-1.5 listener with apollo 【发布时间】:2013-09-27 14:07:03 【问题描述】:

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();
    
);

【问题讨论】:

似乎同时在 activemq 和 mosquitto 上工作.. 有人特别遇到过 apollo 的这个问题吗? 【参考方案1】:

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

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

【讨论】:

其实我刚才确实针对 activemq 5.8.0 进行了测试,它似乎在那里工作。我猜它与发送到主题的消息有关,或者它是阿波罗上的一个错误

以上是关于带有 apollo 的 android mqtt-client-1.5 监听器的主要内容,如果未能解决你的问题,请参考以下文章

android studio怎么安装mqtt

apollo实现c#与android消息推送

MQTT + apache-apollo服务器初学使用

Apollo GraphQL:MQTT 订阅代理以仅提供已发布的数据

apache-apollo MQTT本地测试服务器搭建

如何设置mqtt服务器的账号密码