消息如何从 ActiveMQ 读取并传递到相应的队列?

Posted

技术标签:

【中文标题】消息如何从 ActiveMQ 读取并传递到相应的队列?【英文标题】:How messages read from ActiveMQ and delivered to respective queue? 【发布时间】:2021-12-07 20:43:39 【问题描述】:

我想知道队列如何从将数据存储为滚动日志的 activemq 代理(kahaDB)获取数据。没有特定于队列的日志。不同队列的所有消息都将存储在同一个日志日志文件中。那么它如何有效地从中检索消息。

任何人都知道内部数据是如何从日志文件中获取并在内部逐步发送到相应队列的。比如使用了多少线程。比如详细。

生产者生成的消息存储在 kahadb 日志文件中,索引存储在元数据缓存中。当消费者调用receive()时,受尊重的目标数据如何映射到日志中,以及它如何在内部准确地传递给消费者。和消息流。

【问题讨论】:

请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。 【参考方案1】:

ActiveMQ 的 KahaDB 使用滚动附加日志,因为它是一种将数据存储到消息系统磁盘的非常有效的方式。这种方法的好处是无需在使用消息后对数据存储进行碎片整理。为消息的位置维护一个索引(基于每个队列),因此消费者可以快速传递消息。

其他消息传递系统也采用这种方法。

当使用通用数据库作为后端(尤其是 Oracle)时,通常需要运行管理任务来保持数据文件的清洁和高效运行。回想一下——消息系统正在非常快速地创建和删除数据。这种模式通常不是数据库旨在高效执行的开箱即用模式。

【讨论】:

在 kahaDB 中删除的 acked 消息如何有后台线程检查 acked 消息?是传输连接会要求 KahaDb 中的新消息还是队列的数据如何发送到相应的队列?什么是调度队列?什么是消息诅咒?

以上是关于消息如何从 ActiveMQ 读取并传递到相应的队列?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 MQTT 生产并在 ActiveMQ 中作为 MQTT 和 JMS 消费

一步步教你如何搭建ActiveMQ与RabbitMQ并使用

与 80000 个生产者和少数消费者进行消息传递

ActiveMQ发送消息

阿波罗 activemq ack

ActiveMQ 批量消费者