activemq - ActiveMQ 消息似乎从一个代理中出列,但未到达代理网络中的另一个
问题描述
我有一个代理网络,其中消息从 Java 应用程序生成到现场的小型本地代理,然后有一个静态网络目标,用于指向代理(在 AWS 中)的队列,该代理有一个消费者坐在所有远程代理的队列。
如果连接出现任何中断,远程代理将重新连接成功。问题是在某些情况下,远程代理将重新连接,远程代理上的队列似乎会增加出队计数,但是它打算转发到的中央代理并没有显示出增加的队列队列。
在远程端排队的消息是 Persistent = YES,priority = 4。如果我在代理上手动添加 Persistent = Yes 的消息,则会出现相同的行为。如果我设置persistent = NO,则消息成功到达另一端。如果我重新启动代理,持久消息会再次流动(尽管它认为已成功发送的消息会丢失)。
什么情况会导致这种消息丢失,是否有可以调整的配置选项来解决这个问题?
远程代理的配置是标准 AMQ 安装,定义了以下网络连接器:
<networkConnectors>
<networkConnector
uri="${X.remoteMsgURI}"
staticBridge="true"
dynamicOnly="false"
alwaysSyncSend="true"
userName="${X.remoteUsername}"
password="${X.remotePassword}"
>
<staticallyIncludedDestinations>
<queue physicalName="cloud.${X.environment}.queue.${X.queuebase}"/>
</staticallyIncludedDestinations>
</networkConnector>
</networkConnectors>
静态遥控器的连接字符串是:
remoteMsgURI=static:(failover:(ssl:/X-1.mq.eu-west-2.amazonaws.com:61617?wireFormat.maxInactivityDuration=30000,ssl://X-2.amazonaws.com:61617?wireFormat.maxInactivityDuration=30000))
解决方案
推荐阅读
- reactjs - React-beautiful-dnd:如何让每个物品都可以互相放入?
- security - GWT - 确保 SQL 密码永远不会交给客户端
- activemq-artemis - ActiveMQ Artemis 相当于 ActiveMQ Classic DestinationStatistics
- groovy - Groovy 正则表达式解析值
- php - 如何让 gettext() 以最简单的方式翻译我页面上的字符串
- java - 为什么 Apache Calcite RelOptRule 跳过过滤条件子查询?
- javascript - 默认规则 vue/attribute-hyphenation 是否与 vue/prop-name-casing 冲突?
- reactjs - 在并排组件内限制对 React 中的 Leaflet TileLayers 的访问
- java - 在Java中将当前时间转换为秒的最佳方法
- .net - Blazor AOT 失败并显示“命令“emcc --version”退出,代码为 -1073741515”