ActiveMQ JMSXGroupId消息在代理中出现

时间:2014-10-11 12:16:58

标签: java caching activemq consumer

我在我的应用程序中使用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%的消息将在经纪人中消失(在经纪人中等待)。

注意:

  1. 消费者需要1000毫秒来处理消息。
  2. 消息将在消息发布的第4或第5次迭代中开始在代理中。
  3. 如果我们将 maxPageSize 从默认值200增加到1000.那么攻击开始@ 12或15次迭代。

    任何人都可以帮我解决这个问题...如果您需要更多详细信息,请评论与您分享。

    其他详细信息

    • 邮件仍然未经过处理
    • 我有5个消费者(每个经纪人拥有5个真正的消费者和2个转发消费者)
    • 经纪人和消费者未在测试期间重新启动
    • 但是发布商,启动流程并发布消息然后它将被关闭,然后15分钟后再次启动并发布
    • 发布者将代理与DNS连接,消费者使用逗号分隔的TCP与故障转移连接:
    • 我使用postgres DB来存储日记和商店详细信息配置的消息如下

    注意:所有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>
    

0 个答案:

没有答案