0

我正在使用 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 的文档后,我没有找到任何适合我的用例的答案,所以我问这个伟大的社区,我正在寻找的东西是否真的可行。

4

1 回答 1

1

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

于 2016-05-24T21:23:20.380 回答