我在我的应用程序中使用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是不同的&amp;独一无二的。最后两条消息将具有相同的JMSXGroupId。
问题: 在消费者方面,大约95%的消息被正确消费,大约5%的消息将在经纪人中消失(在经纪人中等待)。
注意:
如果我们将 maxPageSize 从默认值200增加到1000.那么攻击开始@ 12或15次迭代。
任何人都可以帮我解决这个问题...如果您需要更多详细信息,请评论与您分享。
其他详细信息
注意:所有3个代理的配置相同 PersistenceFactory
<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>