jms - 消息如何从 ActiveMQ 读取并传递到相应的队列?
问题描述
我想知道队列如何从将数据存储为滚动日志的 activemq 代理(kahaDB)获取数据。没有特定于队列的日志。不同队列的所有消息都将存储在同一个日志日志文件中。那么它如何有效地从中检索消息。
任何人都知道内部数据如何从日志文件中获取并在内部逐步发送到相应的队列。比如使用了多少线程。比如详细。
生产者生成的消息存储在 kahadb 日志文件中,索引存储在元数据缓存中。当消费者调用receive()时,尊重的目标数据如何映射到日志中,以及它如何在内部准确地传递给消费者。和消息流。
解决方案
ActiveMQ 的 KahaDB 使用滚动附加日志,因为它是一种将数据存储到消息系统磁盘的非常有效的方式。这种方法的好处是无需在使用消息后对数据存储进行碎片整理。为消息的位置维护一个索引(基于每个队列),因此消费者可以快速传递消息。
这种方法也被其他消息传递系统采用。
当使用通用数据库作为后端(尤其是 Oracle)时,通常需要运行管理任务以保持数据文件的清洁和高效运行。回想一下——消息系统正在非常快速地创建和删除数据。这种模式通常不是数据库旨在高效执行的开箱即用模式。
推荐阅读
- sql - 使用光标在表格中选择或插入数据
- c++ - C++ 类指针和所有权
- regex - 如何在标头中查找值
- mysql - 错误代码: 1044: 用户 ' ' '@' '%' 拒绝访问数据库
- php - 如何从另一个目录调用随机 .php 文件
- django - Django - 如何在 URL 中传递列表?
- android - Xamarin Android:从 Java 到 C# 的等效代码是什么:resource.getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
- python - 独立脚本中的交互式数据帧散点图(没有 jupyter)
- r - 根据来自不同列的另一行更改行的值
- rust - 有没有办法将多个派生别名为单个派生?