需要在处理时结束 Apache 骆驼拆分
Need to end Apache camel split while processing
我的目的是一条一条地发送消息列表(消息是使用数据库中的值生成的)。
我所做的是查询并获取消息列表,将其附加到交换器并使用 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
如何实现这个或者
如果我发送批量消息的过程不正确,请就此提出建议。
实现您尝试在 Camel 路由中实现的目标的一种方法是使用 EIP doTry
、doCatch
和 doFinally
,这与著名的 try-catch-finally 非常相似Java 中的块与 stopOnException
关联,以在出现错误时中断拆分的执行。
在下面的示例中,我模拟了我的文件内容的每行验证失败,然后当异常在我的 doCatch
块中被捕获时我执行了一些事情,最后执行了我的 doFinally
块
from("file:src/data")
.doTry()
.split(body().tokenize("\n")).stopOnException()
.log("In split ${body}")
.throwException(new RuntimeException("Not good"))
.end()
.endDoTry()
.doCatch(RuntimeException.class)
.log("In catch: ${body}")
.doFinally()
.log("In finally: ${body}")
.end();
假设我的文件内容是:
line 1
line 2
line 3
我的路线结果是:
In split line 1
In catch: line 1
line 2
line 3
In finally: line 1
line 2
line 3
我的目的是一条一条地发送消息列表(消息是使用数据库中的值生成的)。 我所做的是查询并获取消息列表,将其附加到交换器并使用 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
如何实现这个或者 如果我发送批量消息的过程不正确,请就此提出建议。
实现您尝试在 Camel 路由中实现的目标的一种方法是使用 EIP doTry
、doCatch
和 doFinally
,这与著名的 try-catch-finally 非常相似Java 中的块与 stopOnException
关联,以在出现错误时中断拆分的执行。
在下面的示例中,我模拟了我的文件内容的每行验证失败,然后当异常在我的 doCatch
块中被捕获时我执行了一些事情,最后执行了我的 doFinally
块
from("file:src/data")
.doTry()
.split(body().tokenize("\n")).stopOnException()
.log("In split ${body}")
.throwException(new RuntimeException("Not good"))
.end()
.endDoTry()
.doCatch(RuntimeException.class)
.log("In catch: ${body}")
.doFinally()
.log("In finally: ${body}")
.end();
假设我的文件内容是:
line 1
line 2
line 3
我的路线结果是:
In split line 1
In catch: line 1
line 2
line 3
In finally: line 1
line 2
line 3