RabbitMQ listener stops listening messages when Me

2019-09-19 07:04发布

I am using Spring AMQP for processing the messages in RabbitMQ.

Below is the issue:
1. (say) there are 3 messages in ready state inside RabbitMQ
2. First one is picked up by MessageListener and starts processing. (say) It ends up throwing an exception
3. In this case, the container remains up but the remaining 2 messages are not processed until i restart the container. Also the first messages stays in unacknowledged state.

Is it the expected behavior? If not, how to make sure that other 2 messages will be processed irrespective first one failed processing?

MQ configuraion:

<rabbit:connection-factory id="connectionFactory" host="localhost" username="guest" password="guest" /> 

<rabbit:admin connection-factory="connectionFactory" />

<rabbit:listener-container
    connection-factory="connectionFactory" 
    concurrency="1"
    acknowledge="auto">
    <rabbit:listener queue-names="testQueue" ref="myProcessorListener " />
</rabbit:listener-container>

MessageListener class:

public class MyProcessorListener implements MessageListener{
....
    @Override
public void onMessage(Message message) {
try{
...Some logic...

} catch (Exception e) {
  throw new RuntimeException(e.getMessage(), e);
}

1条回答
闹够了就滚
2楼-- · 2019-09-19 07:35

The message is redelivered over and over again; in order to reject it (and discard or route to a dead letter queue), you need to throw AmqpRejectAndDontRequeueException or set the container's requeue-rejected property to false. When configuring with Java it's defaultRequeueRejected.

You can also use a custom error handler.

This is all explained in the reference manual.

查看更多
登录 后发表回答