gpt4 book ai didi

error-handling - Camel 死信 channel 处理器

转载 作者:行者123 更新时间:2023-12-03 07:40:50 59 4
gpt4 key购买 nike

以下是我的 Camel 路线代码

.errorHandler(deadLetterChannel("jmstx:queue:ErrorHandler")
.useOriginalMessage()
.maximumRedeliveries(1));

from("jmstx:queue:ErrorHandler")
.log("Sending Exception to MyErrorProcessor")
.bean(MyErrorProcessor.class);

from("file:/E:/Target/").routeId("Route1")
.setHeader("route1Header").constant("changed")
.log(LoggingLevel.DEBUG, "Route1Logger", "Inside Route 1")
.throwException(new MyException("E_MYERROR_01"))
.to("file:/E:/Target/Done");

下面是 MyErrorProcessor代码
public void process(Exchange exchange) throws Exception {
Exception e=(Exception)exchange.getProperty(Exchange.EXCEPTION_CAUGHT);
e.printStackTrace();
if(e instanceof MyException){
MyCustomMessage myMsg=new MyCustomMessage(exchange);
logger.error(((MyException) e).getErrorCode(),((MyException) e).getErrorDesc());
}else{
MyCustomMessage myMsg=new MyCustomMessage(exchange); logger.error(myMsg.getFromRouteId(),e.getMessage());
}
}

我的记录器未记录我作为 E_MYERROR_01发送的错误代码

我在errorHandler deadletterchannel中做错什么了吗?

最佳答案

是的,如果jmstx引用了JMS端点,则它仅从消息正文/报头传输数据-而不存储为交换属性的异常。另外,传输的数据还必须符合JMS规范,并且存在发送限制。在Camel JMS文档和Oracle的JMS API javadoc中阅读有关此内容的信息。

  • http://camel.apache.org/jms

  • 如果要将堆栈跟踪/异常发送到 jmstx端点,则需要执行自定义消息转换,并将信息添加到作为JMS消息发送的消息中的某处。可能作为JMS header 之类的东西,然后存储为String文本。然后,在处理器中,您不能将其反序列化为Java异常类型,但是您的数据就像字符串一样。

    您也可以在发送到JMS之前先使用处理器,这可能会更容易。
    errorHandler(deadLetterChannel("direct:dead")
    .useOriginalMessage()
    .maximumRedeliveries(1));

    // route for dead letter where we log it before sending to JMS
    from("direct:dead")
    .log("Sending Exception to MyErrorProcessor")
    .bean(MyErrorProcessor.class);
    .to("jmstx:queue:ErrorHandler");

    关于error-handling - Camel 死信 channel 处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29787625/

    59 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com