当前位置: 首页 > 知识库问答 >
问题:

ARTEMIS-内存和日记之间的消息同步

奚飞星
2023-03-14

在阅读artemis时,docs理解-artemis在内存中存储整个当前活动消息,并可以根据设置将消息卸载到给定队列/主题的分页区域&artemis日志只追加。

关于这一点

  1. 代理如何以及何时从日记同步消息(仅在重新启动期间?)
  2. 它如何标识要从日记中删除的消息(例如:如果日记是仅追加模式,如果持久消息的使用者访问消息,那么代理如何从日记中删除一条消息而不保留索引)。
  3. 将每个活动消息保存在内存中,甚至使broker耗尽内存,这不是一种性能冲击吗?为了避免这种情况,必须在配置中设置每个队列/主题分页设置,否则broker可能会填充所有消息。如有错误请指正。

任何可以解释消息同步和这些信息的参考链接都很有帮助。虽然Artemis docs解释了仅追加模式,但可能是任何解释这些存储概念的章节/文章,我可能会遗漏。

共有1个答案

贲宜春
2023-03-14

默认情况下,在代理接收到持久消息之后,在代理向客户端发送接收到该消息的响应之前,持久消息会持久保存到磁盘上。通过这种方式,客户机可以确定,如果它从代理那里收到响应,那么它发送的持久消息已经收到并保存到磁盘上。

当使用broker.xml中的nioJournal-type(即默认配置)时,使用java.nio.channels.filechannel.force(布尔)将数据同步到磁盘。

由于日记在正常操作期间是只追加的,所以当消息被确认时,它实际上不会从日记中删除。代理只需为该特定消息向日记追加一条删除记录。随后,在“压缩”过程中,该消息将从日志中物理删除。此过程由broker.xml中的journal-compact-min-files&journal-compact-percenty参数控制。有关这方面的更多细节,请参见文档。

将消息数据保存在内存中实际上大大提高了性能,而不是将其从内存中删除,然后不得不在以后从磁盘上读回。正如您所注意到的,这会导致内存消耗问题,这就是代理支持分页、阻塞等的原因。分页是一种姑息性措施,用于作为保持代理功能的最后手段。理想情况下,代理应该配置为处理预期的负载而不进行分页(例如,获取更多的RAM,分配更多的堆)。换句话说,消息生产和消息消费应该是平衡的。代理是为消息流经它而设计的。它当然可以缓冲消息(根据配置和硬件的不同,可能有数百万条消息),但是当它被迫分页时,性能会大大下降,这仅仅是因为磁盘比RAM慢几个数量级。

 类似资料:
  • 第一,你能确认行为的改变吗?第二,有没有恢复的方法?还有一个额外的好处,如果有人知道为什么会发生这种变化,我很想理解。

  • 我们使用核心JMS客户机库,通过Boomi中的JMS连接器向ActiveMQ Artemis 2.11.0发送消息。但是,当通过ActiveMQ管理控制台查看队列中的消息时,队列中消息的时间戳与当前时间和日期不同。队列中的消息是从今天开始的,但您可以看到它的日期是去年9月: 你知道如何修复这个配置吗?

  • 我正在使用ActiveMQ Artemis 2.17.0,并且面临路由问题。 我实现了一个插件,它记录了before消息路由,我看到一些消息从路由到。 没有转移设置,主题和队列由生产者和消费者动态创建。有一个将目标映射到虚拟主题的设置 和都是有效的主题,但它们不应该被链接。 什么能解释这种行为?

  • 问题内容: 我对SOAP消息和WSDL如何组合在一起感到困惑?我已经开始研究SOAP消息,例如: 是否所有SOAP消息都是WSDL?SOAP是接受其自己的“ SOAP消息”或“ WSDL”的协议吗?如果它们不同,那么我什么时候应该使用SOAP消息,什么时候应该使用WSDL? 关于此的一些说明将是很棒的。 问题答案: 每个请求都会发送一个SOAP文档。假设我们是一家书店,并且拥有一台远程服务器,我们

  • 我对SOAP消息和WSDL如何结合感到困惑?我已经开始研究SOAP消息,例如: 所有SOAP消息都是WSDL的吗?SOAP是接受自己的“SOAP消息”还是“WSDL”的协议?如果它们不同,那么什么时候应该使用SOAP消息,什么时候应该使用WSDL消息? 关于这一点的一些澄清将是非常棒的。

  • 本文向大家介绍内存和存储之间的区别,包括了内存和存储之间的区别的使用技巧和注意事项,需要的朋友参考一下 记忆 内存允许短期存储数据。存储器通常由寄存器组成。每个寄存器都有一个称为存储位置或存储位置的位置。每个存储位置均由一个地址标识。内存容量由否决定。内存可以存储的位数。内存分为三种主要类型: 高速缓存存储器 主记忆 二级记忆 存储 存储允许长期存储数据。只要程序需要数据,就将数据从存储器复制到内