Search code examples
springapache-camelactivemq-classicjbossfuseblueprint-osgi

Activemq Topic with multiple consumers


I'm working on this problem a lot of time now and can't seem to find any final solution to it. I have a message producer that should work as a broadcaster, posting messages on two different topics. The publisher's posting process follows the flow :

  • Creating connection to the factory and starting it.
  • Creating session
  • Creating Message Producer by using the session and a given topic Name
  • Sending n* of messages
  • Waiting n seconds
  • Closing producer,session,connection

Then i have 3 consumers subscribed to those topics by using the following configuration (each consumer has it's own clientId and durableSubscriptionName):

<route id="consumerOneRoute">
    <from uri="activemq:topic:topicName?clientId=consumerOneId&durableSubscriptionName=ConsumerOneName" />
    <bean ref="consumerBean" method="processMessage" />
</route>

The fact is that my consumers don't always receive the messages, at least not all of them. Sometimes two of the consumers get all the messages and the 3rd one don't get any, sometimes random consumer receive random number of messages and so on... One more fact that i noticed is that if i stop the broker and start it again, the consumers will receive the missing messages, and i really can't understand why won't that happen during the 1st lifetime of the broker. Would anyone be so kind and try to aid me?

Thanks, George.

P.S : I was thinking about using virtual topics though since my main purpose is to have a broadcasting producer that will allow other consumers to attach in the future i don't want to have the need of modifyin' the producer everytime by adding another virtual branch to the main topic.


Solution

  • Take a look at Prefetch Policy. If you set it to 1 then it may fix this one for you.

    ...&consumer.prefetchSize=1