消息未保留在 Apollo 服务器中

Posted

技术标签:

【中文标题】消息未保留在 Apollo 服务器中【英文标题】:messages not retained in Apollo server 【发布时间】:2013-03-16 15:23:30 【问题描述】:

我在使用 fuse 源代码将 mqtt 消息发布到 Apollo 服务器时遇到问题。 我用如下代码编写了消息发布者

connection.publish(topic, message.getBytes(),QoS.AT_LEAST_ONCE, true);

我还写了订阅主题的消息消费者。如果我先启动消费者,然后启动发布者,消费者可以正确获取所有消息。但是,如果我先启动发布者然后启动消费者,消费者将不会收到消息。 另外,我进入了 Apollo 管理控制台,在队列中找不到任何消息。 (请参阅随附的屏幕截图)。

我应该怎么做才能解决这个问题?我不能让我的消费者一直运行,我不想丢失来自发布者的任何消息。当消费者离线时,代理(Apollo)不应该保留所有消息吗?如果是,我怎么看不到?

这似乎是一个愚蠢的问题,但我对 MQTT 很陌生,我确实需要一些帮助。

【问题讨论】:

您使用的是什么版本的 Apollo? 【参考方案1】:

我怀疑一旦没有生产者或消费者附加到该主题,该主题就会被自动删除。要禁用自动删除“功能”,请在 apollo.xml 的 virual_host 配置元素中添加以下 XML 元素:

<topic auto_delete_after="0"/>

未来版本的 apollo 将避免在持有保留消息 APLO-319 时删除主题。

【讨论】:

【参考方案2】:

这似乎是一个错误,因为您已将消息标记为保留。但是,我不知道 Apollo 对一个主题的多个保留​​消息的表现如何。您可能想在他们的邮件列表中提出这个问题。

【讨论】:

只有最后一条带有保留标志的消息被保留给一个主题。 activemq.apache.org/apollo/documentation/…

以上是关于消息未保留在 Apollo 服务器中的主要内容,如果未能解决你的问题,请参考以下文章

如何从 apollo 服务器发送错误消息

Apollo + React:数据未出现在 componentDidMount 生命周期中

mqtt 用apache Apollo做server,为嘛使用同一个clientid登录第二次就取不出topic的消息

在响应标头中使用 apollo,cookie 但未设置

MQTT系列-保留消息

我的 Apollo 服务器的订阅不起作用:无法读取未定义的属性“标题”