gpt4 book ai didi

java - 如何使 activemq 真正可靠?当 broker 断开连接时消息丢失

转载 作者:行者123 更新时间:2023-11-30 07:11:09 24 4
gpt4 key购买 nike

我们有一个在 Apache TomEE v1.6.0+ 中构建的 JEE6 应用程序。有两部分,云部分和地面部分。云部分旨在永不重启,因为它监视 transient 信息源,但创建 JMS 消息并将它们发送到它的代理。

地面部分旨在在白天重新启动,并且是复杂处理逻辑所在的地方。它也有一个连接到云代理的代理。

我们遇到的问题是,如果我们关闭 TomEE 的地面实例超过几分钟,然后再次启动它,云代理将不会传递所有堆积的消息。此外,它也不传递任何新消息,迫使我们重新启动它,这使我们丢失了消息。

这是两个连接 URI...我们究竟做错了什么??

云:

<Resource
id="ActiveMQResourceAdapter"
type="ActiveMQResourceAdapter">
BrokerXmlConfig = broker:(ssl://0.0.0.0:61617?needClientAuth=true&amp;transport.keepAlive=true&amp;transport.soTimeout=30000,vm://localhost,network:static:(failover:(ssl://ground.somedomain.com:61617?keepAlive=true&amp;soTimeout=30000)))?persistent=true
ServerUrl = vm://localhost
DataSource = jdbc/activemq
</Resource>

地面:

<Resource
id="ActiveMQResourceAdapter"
type="ActiveMQResourceAdapter">
BrokerXmlConfig = broker:(ssl://0.0.0.0:61617?needClientAuth=true&amp;transport.keepAlive=true&amp;transport.soTimeout=30000,vm://localhost,network:static:(failover:(ssl://cloud.somedomain.com:61617?keepAlive=true&amp;soTimeout=30000)))?persistent=true
ServerUrl = vm://localhost
DataSource = jdbc/activemq
</Resource>

非常感谢任何帮助。非常感谢!!

最佳答案

好的,我们学到了一些东西。

首先,我们改用 ActiveMQ 的外部实例,而不是依赖 TomEE 中的嵌入式实例。在启动 TomEE 之前,您必须先启动代理,否则 TomEE 将在启动时创建一个内部代理,您会抓耳挠腮,为什么没有任何消息处理。然后通过设置 BrokerXmlConfig =ServerUrl = tcp://localhost 将 TomEE 连接到代理。

接下来,我们切换到使用 activemq http 传输。这完全消除了任何网络断开问题,因为 http 是无状态的。它非常慢,但是相对于 tcp/ssl,但是消息传输不是我们系统中最慢的点,所以无论如何都没有关系。您必须让外部代理同时监听 http 和 tcp,因为 TomEE 通过 TCP 连接,而远程代理通过 http 连接。

这两件事解决了我们的问题,我们现在有一个完全可靠的系统在运行。我希望这对某人有帮助!!

关于java - 如何使 activemq 真正可靠?当 broker 断开连接时消息丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21470045/

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