我有一个应用程序,在其中为外部系统A创建了2个消息侦听器容器,它们分别侦听两个队列。
我还有1个消息侦听器容器,该容器正在运行并侦听外部系统B的另一个队列。我正在使用spring DefaultMessageListenerContainer。
我的应用程序在集群环境中运行,同时定义了我的消息侦听器容器,我向其注入了实现javax MessageListener接口并充当MDB的侦听器。
所以我的问题是:
答案 0 :(得分:1)
请参见the spring framework JMS documentation和JMS规范。
是的,这很正常-容器只能侦听一个目的地。
这取决于目标类型;对于一个主题,每个实例将获得消息的副本;对于一个队列,多个侦听器(消费者)将争夺消息。这与Spring无关,这是JMS的工作方式。
请参阅#2。
使用DMLC,可在调用容器之前立即进行确认;设置sessionTransacted = true
,以便在侦听器退出之前不提交确认。使用SimpleMessageListenerContainer
,当侦听器退出时,该消息将被确认。有关差异,请参见DMLC和SMLC的Javadocs(以及它们的子类的抽象类)。