【问题标题】:Camel: Routing from queue to HTTPCamel:从队列到 HTTP 的路由
【发布时间】:2020-01-25 18:29:38
【问题描述】:

有点像 Camel 新手,但这里有。

我有以下路线:

    from("activemq:queue:outputQueue").inputType(HelloWorld.class)
    .to("log:stream")
    .marshal().json(JsonLibrary.Jackson, HelloWorld.class)
    .to("http:localhost:5000/messageForYouSir?bridgeEndpoint=true");

这会从队列中检索消息并将它们作为 JSON 发送到 HTTP 端点。很好。

但是如果出现错误怎么办?说 HTTP 错误代码 400?然后我希望消息留在队列中。我已尝试查看不确认该消息,但无法使其正常工作。

我也做了一个异常处理程序

    onException(HttpOperationFailedException.class)
    .handled(false)
    .setBody().constant("Vi fekk ein feil");

但是消息仍然从队列中消失了。有没有什么魔法可以让Camel在出现错误时不承认消息?

【问题讨论】:

  • 不确认消息是要走的路。你看过this question already?
  • 是的,我做到了。但似乎不起作用。尝试了 URL activemq:queue:outputQueue?acknowledgementModeName=CLIENT_ACKNOWLEDGE 但队列已清空。

标签: apache-camel


【解决方案1】:

您必须使用队列中的已交易才能进行回滚。这是在与代理的连接配置上配置的。

看看Camel JMS docs(ActiveMQ 组件扩展了JMS 组件),尤其是关于cache levelstransacted consumption 的部分。

最简单的设置是使用代理交易,只需在JmsConfiguration 上设置transacted = truelazyCreateTransactionManager = false。这样就不需要 Spring TX 管理器了。

如果事务消费到位并且HTTP服务器返回错误(基本上如果Camel Route中发生异常),Camel会自动回滚(如果您没有捕获错误) .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 2020-01-20
    • 2012-02-06
    相关资源
    最近更新 更多