使用DefaultJmsListenerContainerFactory
而不是DefaultMessageListenerContainer
有什么好处?
如果我直接配置DMLC,我会通过调用isRunning()
来获取检查状态的句柄。我也有一个设施来启动和停止DMLC
但是,根据新的春季规格,如果配置DefaultJmsListenerContainerFactory
,我无法处理DMLC,因此我无法执行上述任何操作。
因此,考虑到上述限制,有人可以解释为什么应该使用DefaultJmsListenerContainerFactory
而不是DMLC
另外,如果我使用DefaultJmsListenerContainerFactory
,有什么方法可以实现上述功能?
答案 0 :(得分:2)
引入工厂是为了支持为@JmsListener
带注释的POJO方法创建监听器容器。
如果您没有使用该机制,可以继续直接定义DLMC。
修改强>
使用@JmsListener
时,容器本身未注册为bean,但可以使用注册表bean;您可以获得对容器的引用,以便您可以启动/停止等。
请参阅javadocs了解JmsListenerEndpointRegistry
有关如何按ID或所有方式单独引用容器的信息。
<强> EDIT2 强>
我不确定你在评论3中的意思;注册表包含所有容器,无论使用哪个容器工厂创建容器......
@JmsListener(id="foo", destination="foo", containerFactory="one")
public void listen1(String payload) {
System.out.println(payload + "foo");
}
@JmsListener(id="bar", destination="bar", containerFactory="two")
public void listen2(String payload) {
System.out.println(payload + "bar");
}
如果使用configureListenerContainers()
以编程方式创建端点,则必须为它们提供容器而不是容器工厂。