java ActiveMQ JMSXGroupId消息在代理中被触发
我在应用程序中使用了3个ActiveMQ代理网络。为了维持消费消息的顺序,我使用了JMSXGroupId。我已经使用以下配置配置了代理网络
<managementContext>
<managementContext
createConnector="false"/>
</managementContext>
<networkConnector
name="amq_cluster_amq1_to_amq2"
uri="static:(tcp://host2.name:61616)"
networkTTL="3"
suppressDuplicateQueueSubscriptions="true">
</networkConnector>
<networkConnector
name="amq_cluster_amq1_to_amq3"
uri="static:(tcp://host3.name:61616)"
networkTTL="3"
suppressDuplicateQueueSubscriptions="true">
</networkConnector>
就像我为所有3个代理配置的一样,我的策略条目如下
<policyEntry
queue=">"
producerFlowControl="false"
memoryLimit="5mb"
queuePrefetch="1">
我在3个不同的JVM中有3个消费者,端点配置为concurrentConsumers=5。消费者的代理URL配置如下
消费者-1:
failover:(tcp://host1.name:61616,
tcp://host2.name:61616,
tcp://host3.name:61616)
?randomize=false
&priorityBackup=true
消费者-2:
failover:(tcp://host2.name:61616,
tcp://host3.name:61616,
tcp://host1.name:61616)
?randomize=false
&priorityBackup=true
消费者-3:
failover:(tcp://host3.name:61616,
tcp://host1.name:61616,
tcp://host2.name:61616)
?randomize=false
&priorityBackup=true
用例: 我过去每15分钟发布3000条信息。对于每条消息,JMSXGroupId都是不同的&;独一无二的。最后两条消息将具有相同的JMSXGroupId
问题: 在消费者端,约95%的消息被正确消费,约5%的消息将在代理中被触发(在代理中挂起)
注意:
- 消费者需要1000毫秒来处理该消息李>
- 消息将在消息发布的第4或第5次迭代中开始在代理中李>
如果我们将maxPageSize从默认值200增加到1000。然后开始第12次或第15次迭代
谁能帮我解决这个问题。。。如果您需要更多关于此的详细信息,请发表评论并与您分享
附加细节
- 消息不会被处理
- 我有5个消费者(每个经纪人有5个真实消费者和2个转发消费者)
- 经纪人和消费者在测试期间没有重启
- 但是发布者,启动流程并发布消息,然后它将关闭,15分钟后它将再次启动并发布
- 发布者使用DNS连接代理,消费者使用逗号分隔的TCP进行故障切换:
- 我使用postgres DB存储消息日志和存储详细信息配置如下
注意:所有3个代理的配置都相同 持久性工厂
<persistenceFactory>
<journalPersistenceAdapterFactory
journalLogFiles="10"
journalLogFileSize="50MB"
dataDirectory="${activemq.base}/data"
dataSource="#amq-postgres-ds"
useDatabaseLock="false"
createTablesOnStartup="false"/>
</persistenceFactory>
存储详细信息
<systemUsage>
<systemUsage sendFailIfNoSpace="true">
<memoryUsage>
<memoryUsage limit="512 MB"/>
</memoryUsage>
<storeUsage>
<storeUsage limit="3 GB"/>
</storeUsage>
<tempUsage>
<tempUsage limit="3 GB"/>
</tempUsage>
</systemUsage>
</systemUsage>
共 (0) 个答案