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