繁体   English   中英

ActiveMQ仅在必要时才保留在磁盘上

[英]ActiveMQ persist on disk only when necessary

我将Java与ActiveMQ结合使用,用于从嵌入式Linux发送消息。 我的要求是,如果目标代理不可用,则消息应保留。 我选择KahaDB作为持久性适配器,以便消息在代理重新启动后继续存在。

broker = new SslBrokerService();

KahaDBPersistenceAdapter kahaDBPersistenceAdapter=new KahaDBPersistenceAdapter();
kahaDBPersistenceAdapter.setJournalMaxFileLength(16 * 1024 * 1024);
broker.setPersistenceAdapter(kahaDBPersistenceAdapter);

/** Connector setup code */
broker.start();

即使我将最大文件大小限制为16MB,但如果目标代理/消费者不可用,我也希望保留消息。 这样做的原因是限制CPU和磁盘使用率。 例如:产生消息1,尝试发送消息。 如果不应成功进行持久化,因为我对重新发送已发送的数据不感兴趣(或者应该仅在内存中进行)。 生成消息2、3、4,但目标代理不可用,然后将消息持久保存在磁盘上,以便在不太可能的情况下关闭borker消息后,这些消息将继续存在。

在来回浏览ActiveMQ的文档后,我没有找到关于我的用例的任何答案,因此我问这个伟大的社区,我所寻找的东西是否真的可能。

您必须编写一个自定义插件才能获得确切的场景。 如果只有消费者不可用,JMS不会描述用例的持久性,b / c可靠性合同也与生产者签订。 我认为存储和转发设计将是您想要的。 配置EmbeddedBroker以使用static:networkConnector将其发送到目标代理。 ActiveMQ将自动将消息推送到目标服务器(如果可用),如果远程代理不可用,则将消息在嵌入式服务器上排队。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM