我正在使用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(消息消息)方法。
我应该注意,处理的顺序对我来说并不重要。只是他们一次处理一个这样的事实。
提前致谢。
答案 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}}中的详细信息。