我尝试使用Spring Boot和JMS 实现Azure服务总线集成
但是错误处理程序没有按预期工作,我收到了警告
WARN 10676---[enerContainer-1]o.s.j.l.DefaultMessageListenerContainer:JMS消息侦听器执行失败,未设置ErrorHandler。
抛出异常时,sysout没有在错误处理程序内部调用。我刚刚尝试了以下示例:
@SpringBootApplication
public class So49861714Application {
public static void main(String[] args) {
SpringApplication.run(So49861714Application.class, args);
}
@Bean
public ApplicationRunner runner(JmsTemplate template) {
return args -> template.convertAndSend("foo", "testMessage");
}
@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(
DefaultJmsListenerContainerFactoryConfigurer configurer,
ConnectionFactory connectionFactory,
ErrorHandler myErrorHandler) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
configurer.configure(factory, connectionFactory);
factory.setErrorHandler(myErrorHandler);
return factory;
}
@Bean
public ErrorHandler myErrorHandler() {
return t -> {
System.out.println("In error handler");
t.printStackTrace();
};
}
@JmsListener(destination = "foo")
public void listen(String in) {
System.out.println(in);
throw new RuntimeException("test");
}
}
参考-
https://www.baeldung.com/spring-jms
Spring JMS:为@JmsListener注释的方法设置ErrorHandler
https://lankydan.dev/2017/06/18/using-jms-in-spring-boot
有人请给我建议吗?
您省略了Spring使用自定义org.springframework.jms.config.JmsListenerContainerFactory
bean的说明。使用containerFactory
属性在@JmsListener
注释上设置此项
例如,在您的情况下;
@JmsListener(destination = "foo",containerFactory = "jmsListenerContainerFactory")
public void listen(String in) {
System.out.println(in);
throw new RuntimeException("test");
}