RabbitMQ:预取消息处理

时间:2014-10-24 10:25:09

标签: spring rabbitmq messaging amqp

我正在使用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>

如您所见,prefetchCount为1000。

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

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

提前致谢。

1 个答案:

答案 0 :(得分:2)

SimpleMessageListenerContainer配置包含concurrency参数,用于设置最大使用者线程数:

concurrency: The number of concurrent consumers to start for each listener.

对于单线程操作,您可以将其设置为&#34; 1&#34; - 例如:

<rabbit:listener-container ... prefetch="1000" concurrency="1">
    <rabbit:listener ref="consumer" queue-names="${queue.names}" />
</rabbit:listener-container>

SimpleMessageListenerContainer的{​​{3}}和{{1}}的{​​{3}}中的详细信息。