首页 > 解决方案 > 为什么 DefaultJmsListenerContainerFactory 不公开 setExceptionListener 方法?

问题描述

我正在为使用 aDefaultJmsListenerContainerFactory注册@JmsListener注释方法的应用程序构建遥测和监视过程。

我已经为接收消息时引发的异常注册了一个错误处理程序,但我想注册一个类似的错误处理程序来监视我的应用程序与其订阅的主题之间的连接完整性。

我在 中找到了这个漂亮的setExceptionListener方法AbstractMessageListenerContainter,但是DefaultJmsListenerContainerFactory没有提供设置这个属性的配置方法。

我已经搜索了 spring 框架 JMS javadocs,看看是否有任何解释说明为什么这个配置选项不存在。有谁知道为什么这没有暴露的原因?

标签: springjmsspring-jms

解决方案


这是最终使我能够访问此属性的原因。我测试了我仍然可以像以前一样接收来自该主题的消息

public class PortalJmsListenerContainerFactory
        extends DefaultJmsListenerContainerFactory {

    private ExceptionListener exceptionListener;

    /**
     * @see DefaultMessageListenerContainer#setExceptionListener
     */
    public void setExceptionListener(ExceptionListener exceptionListener) {
        this.exceptionListener = exceptionListener;
    }

    @Override
    protected DefaultMessageListenerContainer createContainerInstance() {
        return new DefaultMessageListenerContainer();
    }

    @Override
    protected void initializeContainer(DefaultMessageListenerContainer container) {
        super.initializeContainer(container);

        if (this.exceptionListener != null) {
            container.setExceptionListener(this.exceptionListener);
        }
    }

}

推荐阅读