Spring integration 如何在子流映射中正确控制流
这是一个基本的问题,但无处可问。(我上周四刚刚开始spring集成。) 我必须使用子流映射。一个XML文件可以包含多个域数据。文件名基筛选只告诉我XML文件中包含什么类型的数据 这是工作版本。2个持久通道执行良好并保存数据Spring integration 如何在子流映射中正确控制流,spring-integration,Spring Integration,这是一个基本的问题,但无处可问。(我上周四刚刚开始spring集成。) 我必须使用子流映射。一个XML文件可以包含多个域数据。文件名基筛选只告诉我XML文件中包含什么类型的数据 这是工作版本。2个持久通道执行良好并保存数据 频道(“更新partsinventoryflow.input”) 频道(“更新TransactionCompleteLogFlow.input”) 实际上,我的意图不是工作版本。数据应在日志之前保存。 工作版本似乎同时保存数据和日志。 请让我知道 提前感谢。同一个密钥不能有多
频道(“更新partsinventoryflow.input”)
频道(“更新TransactionCompleteLogFlow.input”)
实际上,我的意图不是工作版本。数据应在日志之前保存。
工作版本似乎同时保存数据和日志。
请让我知道
提前感谢。同一个密钥不能有多个映射条目。告诉
.subFlowMapping时(PayloadType.STOCK
,这意味着一些内部通道被映射到该类型的HashMap
。这就是相同密钥的第二个映射始终获胜的方式。因此,您的第一个解决方案是正确的方法:一个映射用于预期类型,另一个映射用于将相同消息分发到不同的子流。.subFlowMapping(PayloadType.STOCK, sf -> sf
.transform(unmarshallingTransformer)
.<Stock, List<PartsInventory>>transform(s -> createPartsInventories(s))
.publishSubscribeChannel(c1 -> c1
.subscribe(s1 -> s1
.channel("updatingPartsInventoryFlow.input")))
.publishSubscribeChannel(c2 -> c2
.subscribe(s2 -> s2
.handle((payload, headers) -> {
return createPartsInventoryTransactionLog((List<PartsInventory>) payload, (String) headers.get("StartTime"));
})
.channel("updatingTransactionCompleteLogFlow.input"))))
.subFlowMapping(PayloadType.STOCK, sf -> sf
.transform(unmarshallingTransformer)
.<Stock, List<PartsInventory>>transform(s -> createPartsInventories(s))
.channel("updatingPartsInventoryFlow.input")
.handle((payload, headers) -> {
return createPartsInventoryTransactionLog((List<PartsInventory>) payload,
(String) headers.get("StartTime"));
})
.channel("updatingTransactionCompleteLogFlow.input"))
.subFlowMapping(PayloadType.STOCK, sf -> sf
.publishSubscribeChannel(c1 -> c1
.subscribe(s1 -> s1
.transform(unmarshallingTransformer)
.<Stock, List<PartsInventory>>transform(s -> createPartsInventories(s))
.channel("updatingPartsInventoryFlow.input")))
.handle((payload, headers) -> {
return createPartsInventoryTransactionLog((List<PartsInventory>) payload,
(String) headers.get("StartTime"));
})
.channel("updatingTransactionCompleteLogFlow.input"))))