Мне нужно прочитать сообщение из очереди и вызвать службу REST, делающую сообщение.
Затем я искал транзакцию JMS с Camel, похоже, вы можете установить maximumRedeliveries
вобработать сообщение очереди снова, поэтому, откатывая транзакцию в случае сбоя, мне было интересно, как она может работать, если на том же маршруте верблюда мы должны вызвать службу REST для публикации чего-либо, как эта часть может быть откатом ??
maxDelivery conf:
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откат?поскольку мы вызываем внешнюю службу без сохранения состояния.