提问者:小点点

队列不可用,但Camel的处理器中没有抛出异常


我在骆驼中有一个处理器,它正在向骆驼中的endpoint(apache骆驼)发送消息。

我在camel xml文件中有一个endpoint:

<endpoint id="sendQueue" uri="FBActiveMQ:queue:SEND_Q" />

我从队列管理器中删除了队列sendQueue(使用IBM MQ),并尝试从处理器向该队列发送消息,捕获异常并在处理器本身中处理它。

问题是,当消息被发送到已删除队列时,我从未遇到异常。

我知道我可以在camel文件本身中使用异常处理程序,但我不能这样做,因为我的处理器正在事务边界内执行事务,需要在队列失败时回滚。

你有什么线索吗?

编写的代码是这样的(不是确切的代码)。

    try{
            JmsProducer jmsProducer =  new JmsProducer(endPoint);
            jmsProducer.start();
            Exchange exchange = endPoint.createExchange(ExchangePattern.InOnly);
            exchange.getIn().setBody(msg);
            jmsProducer.process(exchange);
        } catch(Exception e){
           e.printStackTrace();

        }

共1个答案

匿名用户

在try块中的进程调用之后,您是否尝试过检查exchange对象,以查看其中是否有异常。

jmsProducer.process(exchange);
if (exchange.getException() != null) {
    exchange.getException().printStackTrace();;
}

我认为只有当你的 jmsProducer 有问题(例如没有 camelContext)时,你才会得到一个异常。

…删除了原始示例中有关Exchange/Exception键入错误的信息。。。