我想要的是围绕用@RabbitHandler注释的所有方法的一个方面,以便AssertionErrors不会杀死处理程序线程。
我只想将它们包装在RuntimeExceptions中并重新抛出。
动机:除了这些AssertionErrors之外,还有其他我想要使用的错误处理。
我可以在每个方法中为AssertionErrors添加一个try-catch,但是有太多的地方,而我正在考虑使用方面。
[
["CHN", ["1000", "2000"], ["A", "B"]],
["FRA", ["3000", "4000"], ["C", "D"]]
]
所有优雅而优雅,但它不会被调用。我认为这与首先发现这些方法的方式有关。
任何人看到的合理解决方法?
答案 0 :(得分:1)
具有@RabbitListener
的类的@RabbitHandler
可以配置为:
/**
* Set an {@link org.springframework.amqp.rabbit.listener.RabbitListenerErrorHandler}
* to invoke if the listener method throws an exception.
* @return the error handler.
* @since 2.0
*/
String errorHandler() default "";
因此,请考虑改为使用自定义RabbitListenerErrorHandler
方式。
答案 1 :(得分:0)
适用于Spring AOP ......
@SpringBootApplication
public class So48324210Application {
public static void main(String[] args) {
SpringApplication.run(So48324210Application.class, args);
}
@Bean
public MethodInterceptor interceptor() {
return i -> {
try {
System.out.println("here");
return i.proceed();
}
catch (AssertionError e) {
throw new RuntimeException(e);
}
};
}
@Bean
public static BeanNameAutoProxyCreator proxyCreator() {
BeanNameAutoProxyCreator pc = new BeanNameAutoProxyCreator();
pc.setBeanNames("foo");
pc.setInterceptorNames("interceptor");
return pc;
}
@Bean
public Foo foo() {
return new Foo();
}
public static class Foo {
@RabbitListener(queues = "one")
public void listen(Object in) {
System.out.println(in);
}
}
}
或者,正如Artem所说,自定义错误处理程序也会起作用。