我有疑问一条消息是否会在主题中持续存在,我从这篇文章中得到了大部分答案。
但是这种情况如何呢?假设代理重新开始,一些发布者已经开始向一个主题发送消息,现在将来一些持久订户将与该主题连接,但是当前没有持久订户,因此在代理重新开始的情况下,发布者到目前为止向该主题发送的所有消息都将丢失。
我尝试了上述情况,确实所有的信息都丢失了。此外,我尝试了这种情况——我有一个活跃的持久订阅者,它能够将消息推送到主题,然后它关闭,同时更多的消息被推送到主题,然后代理重新启动,最后所有这些增量消息都丢失了。
因此,这基本上意味着,在主题消息无法持久化的情况下,因为与我前面提到的文章中的答案相反,拥有持久订户没有任何效果,因为如果有活动持久订户,则消息将立即被它消费,如果没有活动持久订阅者,代理重新启动,则消息会丢失。
所以,底线是,如果主题消息无法持久化,或者我的理解/测试错误了?
对于干净代理启动,如果所讨论的主题上没有脱机持久订阅,则代理不会持久保存消息,即使这些消息是以持久传递模式发送的。如果随后添加作为持久性发送的持久订阅消息,则将写入存储,如果持久订阅处于脱机状态,则这些消息将保留到使用,或者如果有持久订阅使用者正在读取和确认它们,则将其删除。
如果您不是以持久的传递模式发送消息,那么它们将永远不会持久,即使存在现有的持久订阅也是如此。一旦持久订阅被取消订阅,代理返回到不存储主题消息,即使它们被标记为持久的。
考虑到您看到的行为,最好的猜测是发送时的传递模式是非持久的。
这里需要一点澄清。
1) 没有订阅者的代理 - 所有消息都被代理丢弃。
2)具有在线持久订户的代理——消息(持久的和非持久的)被传送到订户的存储器,通常是队列,然后被订户消费。
3) 具有离线持久订户的代理-消息(持久和非持久)被传递到订户的存储。如果代理发生故障,所有非持久性消息都将丢失。但是,当代理重新启动时,将恢复所有持久消息。
4) 具有联机非持久订阅者的代理 - 消息(持久性和非持久性)被传递给消费者。如果订户脱机,则不会将任何消息传递给使用者,并且代理不会缓存任何消息。
IBMMQ提供了一个名为Retain Publation
的选项,用于保留在主题上发布的最新消息的副本。这样,任何迟到的加入者都将获得此最新消息。
在我们的业务需求中,我们需要将更新传输到分布在全国各地的数千个客户端。问题是,许多这些客户端使用3G网络连接到我们,因此,发生了许多连接/断开连接...我们需要提供的更新是诸如“企业A不能再兑现”或“企业B能够再次兑现”之类的东西,我们正在考虑使用ActiveMQ持久主题来提供这些更新。我的理解是,一旦客户端连接到持久主题,即使他断开连接,每当他回来时,他都会在脱机时收到发送到该主题的消息。最大的
“ActiveMQ中Blob消息传递的持久性”? "我们不能使用数据库(KahaDB)来Blob消息URL吗?" “我们可以像在远程activemq服务器中一样在嵌入式代理中创建文件服务器吗?”
我需要一个Kafka主题存储的消息数量。这与任何消费者是否消费了消息无关。 以上是否等于Kafka主题中当前存储的消息数?
消息应答 ack >[danger] noAck: false 手动接收消息模式 async consume() { const ch = await this.app.amqplib.createChannel(); await ch.assertQueue(queueName, { durable: false }); const msg = await new Pro
我正在使用网络逻辑10.3。我正在尝试配置一个持久订阅,其中包含由 jdbc 存储(在 Oracle DB 中)支持的持久消息。我有一个主题,MDB 正在作为持久订阅者侦听该主题。在场景-1下:如果我发送消息,它会命中MDB。 在场景2中:我挂起了MDB,希望发送到主题的消息只要不被MDB(它是唯一注册的持久订阅者)使用,就会一直存在。但是当我向主题发送消息时,它短暂地出现在那里,然后就消失了(我
我们正在评估SNS以满足集成多个应用程序的消息传递需求。我们有一个生产者,它将消息发布到SNS上的多个主题。每个主题有2-5个订阅者。如果订阅者失败(为了维护而关闭),我对每个消费者使用SQS队列的推荐策略有几个问题 是否可以将SNS配置为仅在向订阅者传递消息失败的情况下推送到SQS?转储SQS队列中的所有消息会给使用者在重新启动时分析队列中的所有消息带来问题 欢迎就如何处理订户故障提出任何建议。