当前位置: 首页 > 知识库问答 >
问题:

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

秋兴思
2023-03-14

我在骆驼中有一个处理器,它正在向骆驼中的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个答案

雍焱
2023-03-14

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

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

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

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

 类似资料:
  • 我正在使用Spring4和Tomcat。问题是有时我不得不在我的筛选器中抛出一个(自定义的)RuntimeException(控件甚至还没有到达控制器)。问题是,由于我没有抛出tomcat理解的异常,它被转换为500(内部服务器错误)。我相信403禁止会比500好(对于我的定制例外)。我查看了和注释。但只有当控件到达控制器时,这些才起作用。 到目前为止,我在筛选器的中将状态手动设置为403。有没有

  • 我有下面的代码块。我得到的是的catch块没有处理它。有人能告诉我如何处理下面的块抛出的异常吗?

  • 我参考的是Spring MVC的@ExceptionHandler注释。 我希望我的@ExceptionHandler注释方法处理所有异常,但会忽略一两个特定异常。 这在Spring MVC 3.2中是否可行?有什么解决办法吗?

  • 问题内容: Sidekiq可以阻止哪些可能的原因来处理队列中的作业?队列已满。日志文件表明完全没有活动。因此,队列已满,但日志为空,Sidekiq似乎未处理项目。似乎没有工人在处理工作。重新启动Redis或用FLUSHALL或FLUSHDB冲洗均无效。Sidekiq已开始于 捆绑执行程序sidekiq -L log / sidekiq.log 并生成以下日志文​​件: 您如何找出问题所在?是否有隐

  • 我正在调试一个HiveProcessor,它遵循官方的PutHiveStreaming处理器,但它写入的是Hive2.x,而不是3.x。该流在Nifi cluster 1.7.1中运行。尽管发生此异常,但数据仍被写入配置单元。 例外情况是: 有人做过类似的事吗?或者有没有更简单的方法来调试自定义处理器?

  • 问题内容: 我想捕获一个异常,将其记录下来,设置一个标志,然后重新抛出相同的异常 我有这个代码: 但是eclipse在throw ex时抱怨,说“未处理的异常类型Exception”,建议我在它周围添加一个try-catch块。 实际上,我希望调用此方法的进程处理该异常,而不是自己处理……如果一切正常,我只想返回true,如果有异常,则将其记录下来 另一方面,我可以将异常包装在另一个异常中,但是不