1

I am consuming messages and then passing them on to a taskexecutor.. My MessageListener will instantiate a SimpleMessageListenerContainer Bean which in turn will instantiate other beans(consumer etc).

When I start the tomcat server and post a message the SimpleMessageListenerContainer bean is getting invoked correctly but when in the same queue I post another message I see RabbitListenerEndpointContainer is getting called. As a result, my other beans are not getting set. I get the message but MDB is not invoked.

When I post a message in a different queue (without restart) it works as expected.

I see no exceptions saying the listener is shutdown etc. Is there a property I am missing?

The only thing I can think of is the first message is not formed correctly resulting into some problem.

My Container Bean

<bean id="springListenerContainerCSWF"
class="org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer">
    <property name="connectionFactory" ref="cachingConnectionFactory" />
    <property name="queues" ref="rabbitDestinationCSWF" />
    <property name="messageListener" ref="rabbitMessageListenerCSWF" /> 
</bean>

Here is the log snippet for first and second message:

Message 1 Log:

DEBUG org.springframework.amqp.rabbit.listener.BlockingQueueConsumer - Storing delivery for consumerTag: 'amq.ctag-Kidy_yvO5xOLL6_7SyuzBw' with deliveryTag: '1' in Consumer@1617944b: tags=[[amq.ctag-Kidy_yvO5xOLL6_7SyuzBw]], channel=Cached Rabbit Channel: AMQChannel(amqp://poc@10.165.1.11:5672/POC,2), conn: Proxy@58651bd2 Shared Rabbit Connection: SimpleConnection@1576020a [delegate=amqp://poc@10.165.1.11:5672/POC, localPort= 61774], acknowledgeMode=AUTO local queue size=0
18:44:29.704 [springListenerContainerABCD_ORDER-1] DEBUG org.springframework.amqp.rabbit.listener.BlockingQueueConsumer - Received message: (Body:'[B@3ac56714(byte[16757])' MessageProperties [headers={timestamp_in_ms=1570626869268}, timestamp=Wed Oct 09 18:44:29 IST 2019, contentLength=0, receivedDeliveryMode=NON_PERSISTENT, redelivered=false, receivedExchange=, receivedRoutingKey=Q.CSW.ABCD_PRODORDER.XYZ, deliveryTag=1, consumerTag=amq.ctag-Kidy_yvO5xOLL6_7SyuzBw, consumerQueue=Q.CSW.ABCD_PRODORDER.XYZ])
18:44:29.704 [springListenerContainerCSWF_ORDER-1] INFO 

    com.dell.ctm.queue.rabbitmessaging.RabbitMQListener - Received message for consumer: salesOrderConsumer
    1

8:44:29.704 [springListenerContainerABCD_ORDER-1] DEBUG com.dell.ctm.queue.rabbitmessaging.RabbitMQListener - Message :: Some Message

Message 2 Log:

 DEBUG org.springframework.amqp.rabbit.listener.BlockingQueueConsumer - Storing delivery for consumerTag: 'amq.ctag-LDAzqxJDNlI-zjXQz0iiiQ' with deliveryTag: '1' in Consumer@568eb60e: tags=[[amq.ctag-LDAzqxJDNlI-zjXQz0iiiQ]], channel=Cached Rabbit Channel: AMQChannel(amqp://poc@10.161.1.11:5672/POC,7), conn: Proxy@58651bd2 Shared Rabbit Connection: SimpleConnection@1576020a [delegate=amqp://poc@10.165.1.11:5672/POC, localPort= 61774], acknowledgeMode=AUTO local queue size=0
    18:46:53.954 [org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1] DEBUG org.springframework.amqp.rabbit.listener.BlockingQueueConsumer - Received message: (Body:'[B@21865b3b(byte[16757])' MessageProperties [headers={timestamp_in_ms=1570627013570}, timestamp=Wed Oct 09 18:46:53 IST 2019, contentLength=0, receivedDeliveryMode=NON_PERSISTENT, redelivered=false, receivedExchange=, receivedRoutingKey=Q.CSW.ABCD_PRODORDER.XYZ, deliveryTag=1, consumerTag=amq.ctag-LDAzqxJDNlI-zjXQz0iiiQ, consumerQueue=Q.CSW.ABCD_PRODORDER.XYZ])
    18:46:54.018 [org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1] DEBUG org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter - Processing [GenericMessage [payload=byte[16757], headers={amqp_receivedDeliveryMode=NON_PERSISTENT, amqp_receivedRoutingKey=Q.CSW.ABCD_PRODORDER.XYZ, timestamp_in_ms=1570627013570, amqp_deliveryTag=1, amqp_timestamp=Wed Oct 09 18:46:53 IST 2019, amqp_consumerQueue=Q.CSW.ABCD_PRODORDER.XYZ, amqp_redelivered=false, id=f55d83d9-88c0-6105-2d02-95e32ac5e57b, amqp_consumerTag=amq.ctag-LDAzqxJDNlI-zjXQz0iiiQ, timestamp=1570627014018}]]
    18:46:54.034 [org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1] INFO com.dell.ctm.queue.rabbitmessaging.RabbitMQListener - Received message for consumer: null
    18:46:54.034 [org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1] DEBUG com.dell.ctm.queue.rabbitmessaging.RabbitMQListener - Message :: Some Message

This is my connection factory

  <bean id="rabbitListenerContainerFactory"
class="org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory">
        <property name="connectionFactory">
            <ref bean="cachingConnectionFactory" />
        </property>
        <property name="concurrentConsumers" value="50" />
        <property name="maxConcurrentConsumers" value="100" />
        <property name="startConsumerMinInterval" value="3000" />
    </bean>
Aniruddha
  • 31
  • 6
  • Pardon me for asking something naive or not understanding things correctly.. I am pretty new to all this and do not understand everything completely yet especially the TaskExecutor part.. – Aniruddha Oct 09 '19 at 19:46
  • You should generally not hand off work to a task executor in a message listener; if you want to process multiple messages concurrently, you should increase the container's `concurrentConsumers`. However, we're clearly passing a second message to your listener `Processing [GenericMessage [payload=byte[16757]`. – Gary Russell Oct 09 '19 at 22:01
  • My concurrentconsumers count is set to 50.. My problem is not the second message but the Message Driven Bean that is instantiated with the message.. When the second message comes in it is invoking a [org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1] type container but I need it to be [springListenerContainerABCD_ORDER-1] – Aniruddha Oct 10 '19 at 09:50
  • The `SimpleRabbitListenerContainerFactory` is not a "connection factory", it is a container factory, usually used for `@RabbitListener` annotated methods; so it appears you have multiple listeners on the same queue. Show the rest of your configuration. You don't have concurrency on `springListenerContainerCSWF`. – Gary Russell Oct 10 '19 at 13:07
  • yes, I just realized that five minutes back that I confused between ContainerFactory and Connection Factory names. I am now trying to set ConcurrentConsumers correctly. Will update you in sometime on how it goes. – Aniruddha Oct 10 '19 at 13:23
  • 1
    Yes, that was the mistake I was making. It is working fine now. I did not pay proper attention to where I am setting ConcurrentConsumers. Thanks Gary, you have been very helpful – Aniruddha Oct 10 '19 at 13:26

0 Answers0