骆驼没有捕捉到异常
Camel doesn't catch Exception
.from("seda:rest_upload")
.process(new Processor() {
@Override
public void process(Exchange exchange) {
if(true){
throw new RuntimeException();
}})
.to("seda:parsed_csv")
.onException(Exception.class).process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
logger.warn("Error");
}
});
但是logger.warn("Error");
没有被调用。
我做错了什么?
如何为 camel 路由注册全局异常处理程序?
将 onException 块移到路由顶部,不要忘记 end()
终止符。
end()
告诉 Camel,onException 块在哪里结束。如果你忽略它,Camel 会将其视为一个 onException
块。只是会有路由从 seda 消耗并且没有输出处理器,因为 onException()
之后的所有内容都成为 onException
块的一部分。
特定于路由的异常处理:
处理路由 seda:rest_upload
中发生的异常
from("seda:rest_upload")
.onException(Exception.class).process(exchange -> logger.warn("Error")).end()
.process(e -> {throw new RuntimeException();})
.to("seda:parsed_csv");
from("seda:parsed_csv").to("log:parsed_csv");
from("timer:tmr?period=1000")
.setBody(constant("mock"))
.to("seda:rest_upload");
全局异常处理: 处理当前RouteBuilder
中所有路由的异常
onException(Exception.class).process(exchange -> logger.warn("Error")); //There is no need for end(), whole block is part of onException block
from("seda:rest_upload")
.process(e -> {throw new RuntimeException();})
.to("seda:parsed_csv");
from("seda:parsed_csv").to("log:parsed_csv");
from("timer:tmr?period=1000")
.setBody(constant("mock"))
.to("seda:rest_upload");
.from("seda:rest_upload")
.process(new Processor() {
@Override
public void process(Exchange exchange) {
if(true){
throw new RuntimeException();
}})
.to("seda:parsed_csv")
.onException(Exception.class).process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
logger.warn("Error");
}
});
但是logger.warn("Error");
没有被调用。
我做错了什么?
如何为 camel 路由注册全局异常处理程序?
将 onException 块移到路由顶部,不要忘记 end()
终止符。
end()
告诉 Camel,onException 块在哪里结束。如果你忽略它,Camel 会将其视为一个 onException
块。只是会有路由从 seda 消耗并且没有输出处理器,因为 onException()
之后的所有内容都成为 onException
块的一部分。
特定于路由的异常处理:
处理路由 seda:rest_upload
from("seda:rest_upload")
.onException(Exception.class).process(exchange -> logger.warn("Error")).end()
.process(e -> {throw new RuntimeException();})
.to("seda:parsed_csv");
from("seda:parsed_csv").to("log:parsed_csv");
from("timer:tmr?period=1000")
.setBody(constant("mock"))
.to("seda:rest_upload");
全局异常处理: 处理当前RouteBuilder
onException(Exception.class).process(exchange -> logger.warn("Error")); //There is no need for end(), whole block is part of onException block
from("seda:rest_upload")
.process(e -> {throw new RuntimeException();})
.to("seda:parsed_csv");
from("seda:parsed_csv").to("log:parsed_csv");
from("timer:tmr?period=1000")
.setBody(constant("mock"))
.to("seda:rest_upload");