29

Spring を使用して JMS メッセージをリッスンすると、上記のエラーが発生します。

エラーハンドラーを JMS リスナーに追加する方法を知りたいですか?

4

5 に答える 5

22

にプロパティがありますAbstractMessageListenerContainer:

<bean id="listener" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="errorHandler" ref="someHandler"/>
    <property name="destinationName" value="someQueue"/>
    <property name="connectionFactory" ref="connectionFactory"/>
</bean>

someHandler実装する Bean はどこにありますかErrorHandler:

@Service
public class SomeHandler implements ErrorHandler {

    @Override
    public void handleError(Throwable t) {
        log.error("Error in listener", t);
    }
}

ただし、ドキュメントによると、次のことに注意してください。

このメッセージ リスナーのデフォルトの動作 [...] は、そのような例外をエラー レベルでログに記録します。[...] ただし、エラー処理が必要な場合は、ErrorHandler 戦略の実装を setErrorHandler(ErrorHandler) メソッドに提供できます。

ログを確認してください。おそらく、例外は既にログに記録されていますか?

于 2012-01-19T07:50:56.490 に答える
5

xml 構成なし。ApplicationContext で次のことを行いました。

@Bean
JmsListenerContainerFactory<?> jmsContainerFactory(ConnectionFactory connectionFactory,
        SomeHandler errorHandler) {
    SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory);
    factory.setErrorHandler(errorHandler);
    return factory;
}


// From Tomasz answer
@Service
public class SomeHandler implements ErrorHandler {

    @Override
    public void handleError(Throwable t) {
        log.error("Error in listener", t);
    }
}
于 2016-04-08T13:09:37.397 に答える
1

デフォルトの工場が使用されている場合:

    @Bean
    public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(ConnectionFactory connectionFactory,
            SomeHandler errorHandler) {
        DefaultJmsListenerContainerFactory factory =
                new DefaultJmsListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setErrorHandler(errorHandler);
        return factory;
    }
于 2016-12-08T11:18:23.200 に答える