Spring Boot JMS错误处理程序不工作



我尝试使用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.JmsListenerContainerFactorybean的说明。使用containerFactory属性在@JmsListener注释上设置此项

例如,在您的情况下;

@JmsListener(destination = "foo",containerFactory = "jmsListenerContainerFactory")
public void listen(String in) {
System.out.println(in);
throw new RuntimeException("test");
}

相关内容

最新更新