Multithreaded JMS client ActiveMQ

后端 未结 1 1797
不知归路
不知归路 2020-12-20 06:37

I am using the below code to create multiple JMS sessions for multiple consumers to consume messages. My problem is that the code is running in a single threaded fashion. Ev

相关标签:
1条回答
  • 2020-12-20 07:12

    your problem is the prefetchPolicy.

    persistent queues (default value: 1000)
    non-persistent queues (default value: 1000)
    persistent topics (default value: 100)
    non-persistent topics (default value: Short.MAX_VALUE - 1)
    

    all messages was dispatched to the first connected consumer and when another one connects he don't receive messages, so to change this behavior if you have concurrent consumer for a queue you need to set prefetchPolicy to a lower value than default. for example add this jms.prefetchPolicy.queuePrefetch=1 to the uri config in activemq.xml or set it on the client url like this

    ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://172.16.143.99:61616?jms.prefetchPolicy.queuePrefetch=1");
    

    Large prefetch values are recommended for high performance with high message volumes. However, for lower message volumes, where each message takes a long time to process, the prefetch should be set to 1. This ensures that a consumer is only processing one message at a time. Specifying a prefetch limit of zero, however, will cause the consumer to poll for messages, one at a time, instead of the message being pushed to the consumer.

    Take a look at http://activemq.apache.org/what-is-the-prefetch-limit-for.html

    And

    http://activemq.apache.org/destination-options.html

    0 讨论(0)
提交回复
热议问题