DefaultJmsListenerContainerFactory与DefaultMessageListenerContainer

use*_*483 5 spring spring-jms spring-boot

使用DefaultJmsListenerContainerFactoryover有DefaultMessageListenerContainer什么优点?

  • 如果直接配置DMLC,则可以通过调用来检查状态isRunning()。我也确实可以启动和停止DMLC

  • 但是,根据新的春季规格,如果我配置DefaultJmsListenerContainerFactory,我将无法处理DMLC,因此无法执行上述任何操作。

因此,从上述限制来看,有人可以解释为什么应该DefaultJmsListenerContainerFactory在DMLC上使用

另外,如果我使用DefaultJmsListenerContainerFactory,实现上述功能的方法是什么?

Gar*_*ell 5

引入工厂是为了支持为带@JmsListener注释的 POJO 方法创建侦听器容器。

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

编辑

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

请参阅的javadocJmsListenerEndpointRegistry如何通过ID或所有单独去的容器引用。

编辑2

我不确定您在评论 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");
}
Run Code Online (Sandbox Code Playgroud)

如果您使用configureListenerContainers()以编程方式创建端点,则必须为它们提供容器而不是容器工厂。