DefaultJmsListenerContainerFactory 与 DefaultMessageListenerContainer
DefaultJmsListenerContainerFactory vs DefaultMessageListenerContainer
使用 DefaultJmsListenerContainerFactory
比 DefaultMessageListenerContainer
有什么优势?
如果我直接配置 DMLC,我会通过调用 isRunning()
获得一个句柄来检查状态。我也有一个工具来启动和停止 DMLC
但是,根据新的 spring 规范,如果我配置 DefaultJmsListenerContainerFactory
,我没有得到 DMLC 的句柄,所以我无法执行上述任何操作。
所以看看上面的限制,有人可以解释为什么应该使用 DefaultJmsListenerContainerFactory
而不是 DMLC
此外,如果我使用 DefaultJmsListenerContainerFactory
,实现上述功能的方法是什么?
引入工厂是为了支持为 @JmsListener
带注释的 POJO 方法创建侦听器容器。
如果您不使用该机制,您可以继续直接定义您的 DLMC。
编辑
当使用 @JmsListener
时,容器本身并未注册为 beans,但可以使用注册 bean;你可以获得对容器的引用,这样你就可以 start/stop 等等
请参阅 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()
以编程方式创建端点,则必须为它们提供容器而不是容器工厂。
使用 DefaultJmsListenerContainerFactory
比 DefaultMessageListenerContainer
有什么优势?
如果我直接配置 DMLC,我会通过调用
isRunning()
获得一个句柄来检查状态。我也有一个工具来启动和停止 DMLC但是,根据新的 spring 规范,如果我配置
DefaultJmsListenerContainerFactory
,我没有得到 DMLC 的句柄,所以我无法执行上述任何操作。
所以看看上面的限制,有人可以解释为什么应该使用 DefaultJmsListenerContainerFactory
而不是 DMLC
此外,如果我使用 DefaultJmsListenerContainerFactory
,实现上述功能的方法是什么?
引入工厂是为了支持为 @JmsListener
带注释的 POJO 方法创建侦听器容器。
如果您不使用该机制,您可以继续直接定义您的 DLMC。
编辑
当使用 @JmsListener
时,容器本身并未注册为 beans,但可以使用注册 bean;你可以获得对容器的引用,这样你就可以 start/stop 等等
请参阅 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()
以编程方式创建端点,则必须为它们提供容器而不是容器工厂。