gpt4 book ai didi

java - ActiveMQ 仅在必要时保留在磁盘上

转载 作者:行者123 更新时间:2023-12-01 09:54:11 25 4
gpt4 key购买 nike

我使用 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 不会描述持久化的用例,因为可靠性契约(Contract)也与生产者有关。我认为存储转发设计正是您所寻找的。配置embeddedBroker以使用static:networkConnector将其发送到目标代理。 ActiveMQ 会在可用时自动将消息推送到目标服务器,并在远程代理不可用时将它们在嵌入式服务器上排队。

关于java - ActiveMQ 仅在必要时保留在磁盘上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37369244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com