我正在尝试设置两个 ActiveMQ Classic 代理,用作多个微服务的通信通道。
我愿意:
简而言之,我希望拥有没有持久性的冗余代理,因此我可以关闭一个节点进行维护,并让其他节点接受连接。
从 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"
。
为了实现您想要的解决方案,您不能完全禁用持久性(不应该使用pecient =“false”)。 相反,仅将持久性用于主/故障转移锁(以前称为主/从)。客户端负责设置持久性标志,因此您仍然可以根据需要获得非持久性行为。或者,您可以使用该插件强制所有消息都是非持久性的。
作为奖励,当您启用 kahadb 时,如果您开始耗尽内存,ActiveMQ 将使用临时存储将非持久性消息交换到磁盘。
这允许代理处理比它拥有的更多的非持久性消息可用内存。