【问题标题】:ActiveMQ persist on disk only when necessaryActiveMQ 仅在必要时保留在磁盘上
【发布时间】:2016-05-25 05:23:20
【问题描述】:

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

【问题讨论】:

    标签: java activemq embedded-linux kahadb


    【解决方案1】:

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

    【讨论】:

    • 我已经在使用带有嵌入式代理的网络连接器。不过,我必须为我的用例构建一个自定义适配器。谢谢你的建议
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多