我使用Java和ActiveMQ从Embedded-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的文档后,我没有找到任何有关我的用例的答案,所以我问这个伟大的社区,如果我真正想要的话。
答案 0 :(得分:1)
您必须编写自定义插件才能获得确切的方案。如果只有消费者不可用,JMS没有描述用例持久,b / c可靠性合同也与生产者有关。我认为存储转发设计将是您正在寻找的。配置embeddedBroker以使用static:networkConnector将其发送到目标代理。 ActiveMQ会在可用时自动将消息推送到目标服务器,如果远程代理不可用,则将它们排队到嵌入式服务器上。