RabbitMQ:预取消息处理

Yon*_*kof 5 messaging spring amqp rabbitmq

我正在使用Spring AMQP与RabbitMQ一起工作.这是我的配置:

<rabbit:connection-factory id="connectionFactory"
    host="${queue.host}" port="${queue.port}" />
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" />
<rabbit:admin connection-factory="connectionFactory" />
<rabbit:queue name="${queue.names}" durable="true"
    exclusive="false" />
<rabbit:listener-container
    connection-factory="connectionFactory" acknowledge="auto" error-handler="airbrakeHandler" prefetch="1000" >
    <rabbit:listener ref="consumer" queue-names="${queue.names}" />
</rabbit:listener-container>
Run Code Online (Sandbox Code Playgroud)

如您所见,prefetchCount为1000.

我想知道预取消息是否在消费者中并行处理; 也就是说,多个线程调用onMessage(消息消息)方法.或者是按顺序处理消息; 也就是说,一个线程迭代预取消息,并以一种有序的方式在每个消息上调用onMessage(消息消息)方法.

我应该注意,处理的顺序对我来说并不重要.只是他们一次处理一个这样的事实.

提前致谢.

she*_*erb 2

SimpleMessageListenerContainer配置包含一个concurrency参数来设置最大消费者线程数:

concurrency: The number of concurrent consumers to start for each listener.
Run Code Online (Sandbox Code Playgroud)

对于单线程操作,您可以将其设置为“1” - 例如:

<rabbit:listener-container ... prefetch="1000" concurrency="1">
    <rabbit:listener ref="consumer" queue-names="${queue.names}" />
</rabbit:listener-container>
Run Code Online (Sandbox Code Playgroud)

更多信息请参见Spring文档SimpleMessageListenerContainer.