在集成流程中,具有默认策略的拆分会从列表中发出项目。处理该项目可能会失败。我想处理该错误并使用前一个(除了自定义错误标头)之外的映射信息将新消息定向到正常消息传递通道。
在聚合器中,我想自定义聚合逻辑,以生成其他类型的消息,其中包含失败进程的计数和未失败的消息的结果。
在这里,我将解释如何使用标题发送错误消息:
// Initiate the x-editable plugin
function get_editable() {
$.fn.editable.defaults.mode = 'popup';
$('.xedit').editable();
}
// Initiate the DataTable
table = $('#table').DataTable({
option...
drawCallback: function (settings) {
get_editable();
},
option...
});
我希望聚合器生成这种类型的对象:
@Bean
public IntegrationFlow socialMediaErrorFlow() {
return IntegrationFlows.from("socialMediaErrorChannel")
.wireTap(sf -> sf.handle("errorService", "handleException"))
.<MessagingException>handle((p, h)
-> MessageBuilder.withPayload(Collections.<CommentEntity>emptyList())
.copyHeaders(p.getFailedMessage().getHeaders())
.setHeader("ERROR", true)
.build()
)
.channel("directChannel_1")
.get();
}
我该如何处理?
提前感谢。
感谢Artem的帮助,我做了这个实现:
public class Result {
private Integer totalTask;
private Integer taskFailed;
private List<CommentEntity> comments;
}
答案 0 :(得分:2)
AggregatorSpec
有outputProcessor
属性:
/**
* A processor to determine the output message from the released group. Defaults to a message
* with a payload that is a collection of payloads from the input messages.
* @param outputProcessor the processor.
* @return the aggregator spec.
*/
public AggregatorSpec outputProcessor(MessageGroupProcessor outputProcessor) {
在这里,您可以提供自己的自定义逻辑来解析组中的所有邮件,并为它们构建Result
。
来自测试用例的样本:
.aggregate(a -> a.outputProcessor(g -> g.getMessages()
.stream()
.map(m -> (String) m.getPayload())
.collect(Collectors.joining(" "))))
Cafe Demo示例:
.aggregate(aggregator -> aggregator
.outputProcessor(g ->
new Delivery(g.getMessages()
.stream()
.map(message -> (Drink) message.getPayload())
.collect(Collectors.toList())))
.correlationStrategy(m -> ((Drink) m.getPayload()).getOrderNumber()))