有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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%的消息将在代理中被触发(在代理中挂起)

注意:

  1. 消费者需要1000毫秒来处理该消息
  2. 消息将在消息发布的第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) 个答案