【发布时间】:2018-11-20 10:58:41
【问题描述】:
我需要从队列中读取消息并调用 REST 服务进行发布。
然后,我在看Camel的JMS事务,看起来你可以设置一个maximumRedeliveries来再次处理队列消息,所以在失败的情况下回滚事务,我想知道它是如何工作的如果在同一条骆驼路线中,我们必须调用 REST 服务来发布内容,那么该部分如何回滚??
maxDelivery 配置:
errorHandler(new TransactionErrorHandlerBuilder()
.loggingLevel(LoggingLevel.ERROR)
.useOriginalMessage()
.maximumRedeliveries(2)
.logHandled(false)
.logExhausted(true)
);
路线的伪代码:
//Reading message from the queue
from("activemq:AMQ.App.EMC2.In.PMQueue?jmsMessageType=Bytes").
transacted().
unmarshal(jaxbDataFormat).bean(pmMessageEnricher).
to("direct:start-post");
//Then doing the post
from("direct:start-post").
setHeader(Exchange.HTTP_METHOD, constant("POST")).
setHeader(Exchange.CONTENT_TYPE, constant("application/json")).
setBody(constant(pmMessageEnricher.toJson())).
to("http://xxx").
to("direct:start-somethingelse");
//Then doing something else
from("direct:start-somethingelse").
blabla...
假设start-somethingelse 发生异常,如何回滚 REST 后调用?因为我们以无状态方式调用外部服务。
【问题讨论】:
标签: java apache-camel