DefaultJmsListenerContainerFactory相比,使用DefaultMessageListenerContainer有什么优势?

  • 如果我直接配置DMLC,则可以通过调用isRunning()来获取检查状态的句柄。我也确实有启动和停止DMLC
  • 的功能
  • 但是,根据新的 Spring 规范,如果我配置DefaultJmsListenerContainerFactory,则无法获得DMLC的句柄,因此无法执行上述任何操作。

  • 因此,从上述限制来看,有人可以解释为什么应该在DMLC上使用DefaultJmsListenerContainerFactory
    另外,如果我使用DefaultJmsListenerContainerFactory,实现上述功能的方法是什么?

    最佳答案

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

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

    编辑

    使用@JmsListener时,容器本身未注册为Bean,但可通过注册表Bean使用;您可以获得对该容器的引用,因此可以启动/停止等。

    有关如何按id或全部获取对容器的引用,请参见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()以编程方式创建端点,则必须为它们提供容器而不是容器工厂。

    关于spring - DefaultJmsListenerContainerFactory与DefaultMessageListenerContainer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33406925/

    10-10 12:49