Spring AMQP中的SimpleMessageListenerContainer
和DirectMessageListenerContainer
有什么区别?我检查了他们的两个文档页面,SimpleMessageListenerContainer
几乎没有内部运作的解释,DirectMessageListenerContainer
拥有以下解释:
SimpleMessageListenerContainer并不是那么简单。对Rabbitmq Java客户端的最新更改促进了一个更简单的侦听器容器,该容器直接在Rabbit客户端使用者线程上调用侦听器。没有txSize属性-每个消息都被单独确认(或取消确认)。
我真的不明白这些是什么意思。它说listener container that invokes the listener directly on the rabbit client consumer thread
。如果是这样,那么SimpleMessageListenerContainer
如何进行调用?
我编写了一个小应用程序,并使用DirectMessageListenerContainer
,只是为了查看区别,我切换到SimpleMessageListenerContainer
,但据我所知,RabbitMQ方面没有任何区别。从Java方面来看,区别在于方法(SimpleMessageListenerContainer
提供了更多)和日志(DirectMessageListenerContainer
记录了更多内容)
我想知道使用其中每个场景的场景。
最佳答案
SMLC对于每个使用者(并发)都有一个专用线程,该线程轮询内部队列。当新消息在客户端线程上到达消费者时,它将被放入内部队列中,然后消费者线程将其接收并调用侦听器。早期版本的客户端需要提供多线程。对于较新的客户端,这不是问题,因此我们可以直接调用侦听器(因此命名)。
除了txSize
之外,还有其他一些区别。
参见Choosing a Container。