DefaultJmsListenerContainerFactory 与 DefaultMessageListenerContainer

DefaultJmsListenerContainerFactory vs DefaultMessageListenerContainer

使用 DefaultJmsListenerContainerFactoryDefaultMessageListenerContainer 有什么优势?

所以看看上面的限制,有人可以解释为什么应该使用 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() 以编程方式创建端点,则必须为它们提供容器而不是容器工厂。