我的目的是一个一个地发送消息列表(消息是使用数据库中的值生成的)。我所做的是查询并获取消息列表,将其附加到交换中,并使用split来滑动消息,然后发送
下面是我的路线
.process(this::analyseSettlement)
.choice()
.when()
.simple("${header.error_reason} == 001")
.log("Settlement Completed")
.otherwise()
.log("BatchUpload process")
.split(body(), flexible().accumulateInCollection(ArrayList.class))
.setHeader(Exchange.HTTP_METHOD).constant(HttpMethod.POST)
.removeHeader(Exchange.HTTP_PATH)
.marshal().json(JsonLibrary.Jackson)
.to("http://localhost:8087/channel/tcp?bridgeEndpoint=true")
// analyze response if success then update the table
// if not return error
.unmarshal(new JacksonDataFormat(InternalTransactionBean.class))
.process(this::analyseBatchUploadResponse)
.end()
.log("${body}")
.process(this::processPostSettlement)
我所需要的是,如果我在其中一个响应中发现错误,需要停止发送所有未发送消息,结束拆分并转到postProcesssettlement函数
所需流量-〉
Message list->
send message 1 by one
error occurred while processing one message
stop processing the rest of the messages and exit the route
如何实现这一点或如果我的过程中发送批量消息是不正确的,请建议我有关。
1条答案
按热度按时间cdmah0mi1#
在Camel路由中实现所需功能的一种方法是使用EIP
doTry
、doCatch
和doFinally
,这与Java中与stopOnException
相关的著名try-catch-finally块非常相似,以便在出错时中断split的执行。在下面的示例中,我模拟了对文件内容的逐行验证失败,然后在
doCatch
块中捕获到异常时执行一些操作,最后执行doFinally
块中发生的任何其他操作假设我的文件的内容是:
我的路线的结果是:
有关EIP
doTry
、doCatch
和doFinally
的更多详细信息。有关选项
stopOnException
的更多详细信息。