spring – DefaultJmsListenerContainerFactory vs DefaultMessageListenerContainer

使用DefaultJmsListenerContainerFactory而不是DefaultMessageListenerContainer有什么好处?

>如果我直接配置DMLC,我会通过调用isRunning()来获取检查状态的句柄.我也有一个设施来启动和停止DMLC
>但是,根据新的spring规范,如果我配置DefaultJmsListenerContainerFactory,我没有得到DMLC的句柄,所以我无法进行上述任何操作.

因此,考虑到上述限制,有人可以解释为什么应该使用DefaultJmsListenerContainerFactory而不是DMLC

此外,如果我使用DefaultJmsListenerContainerFactory,有什么方法可以实现上述功能?

最佳答案 引入工厂是为了支持为@JmsListener注释的POJO方法创建监听器容器.

如果您不使用该机制,则可以继续直接定义DLMC.

编辑

使用@JmsListener时,容器本身未注册为bean,但可以使用注册表bean;您可以获得对容器的引用,以便您可以启动/停止等.

有关如何通过id或all单独获取对容器的引用,请参阅javadocs以获取JmsListenerEndpointRegistry.

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()以编程方式创建端点,则必须为它们提供容器而不是容器工厂.

点赞