主/从非持久ActiveMQ经典配置

问题描述 投票:0回答:1

我正在尝试设置两个 ActiveMQ Classic 代理,用作多个微服务的通信通道。

我愿意:

  1. 让代理位于两台不同的机器上,以便两个代理处于故障转移状态,其中一台机器关闭后,另一台机器将获取锁并成为主机。
  2. 不必担心持久消息带来的磁盘使用情况。

简而言之,我希望拥有没有持久性的冗余代理,因此我可以关闭一个节点进行维护,并让其他节点接受连接。

从 5.3.18 开始,似乎没有办法实现这一点,因为代理配置为使用 Kahadb 作为共享文件系统主从,但持久性=“假”属性处于活动状态 产生这个日志:

WARN | persistent="false", ignoring configured persistenceAdapter: KahaDBPersistenceAdapter

并且经纪商实际上忽略了锁定文件检查(它们都处于活动状态)。

settings.xml 中的两个相关配置位是:

...
<broker persistent="false" xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
...
   <persistenceAdapter>
      <kahaDB directory="/mnt/SHARED_AMQ" lockKeepAlivePeriod="1000">
         <locker>
            <shared-file-locker lockAcquireSleepInterval="1000"/>
         </locker>
      </kahaDB>
   </persistenceAdapter>
...

请注意,我通过持久性实现了工作冗余配置,删除了

persistent="false"

activemq-classic
1个回答
0
投票

为了实现您想要的解决方案,您不能完全禁用持久性(不应该使用pecient =“false”)。 相反,仅将持久性用于主/故障转移锁(以前称为主/从)。客户端负责设置持久性标志,因此您仍然可以根据需要获得非持久性行为。或者,您可以使用该插件强制所有消息都是非持久性的。

作为奖励,当您启用 kahadb 时,如果您开始耗尽内存,ActiveMQ 将使用临时存储将非持久性消息交换到磁盘。

这允许代理处理比它拥有的更多的非持久性消息可用内存。

© www.soinside.com 2019 - 2024. All rights reserved.