apache-camel - 收到标头时如何完成聚合器中的所有待处理消息
问题描述
我想根据骆驼路线创建类似“左外连接”的东西。在我的项目中,我有两条路线,它们使用来自 2 个数据库表的数据并将其逐行发送到下一步(joinData)。两个表都有相同的主键,我想根据这个主键连接这两个表中的数据。我的情况是:
<route id="select1">
//some code
<to uri="direct:joinData"/>
</route>
<route id="select2">
//some code
<to uri="direct:joinData"/>
</route>
<route id="joinData">
<from uri="direct:joinData"/>
<aggregate strategyRef="joinStrategy" completionSize="2">
<correlationExpression>
<jsonpath>$.ID</jsonpath>
<to uri="direct:result/>
</aggregate>
</route>
来自两个来源的最后一条消息包含在上次选择记录时设置为 true 的特殊标头/属性。是否有一些可能性,当这个特殊的标头出现时,如何完成在聚合器中等待的剩余未决消息,或者更好的是,两个标头都来了?因为,现在只有加入的消息被发送到结果路由。当从数据库加载结束时,我想完成所有待处理的消息。
谢谢你的想法。
解决方案
只需添加一个completionPredicate
来告诉 Camel 在哪种情况下必须将聚合视为完整(在您的情况下,这是您的特殊标头/属性设置为 true 时)。您可以使用 CamelSimple language
来表达谓词。例子:
<aggregate strategyRef="myStrategy" eagerCheckCompletion="true">
...
<completionPredicate>
<simple>${body} contains 'STOP'</simple>
</completionPredicate>
推荐阅读
- javascript - hls 视频格式不适用于 Angular 7
- swift - 在场景之间移动时从 SpriteKit 内部丢失对 GameViewController 的引用 - 想要在 SKScene 和 UITableView 之间移动
- javascript - useEffect 用于设置输入值时抛出错误
- reactjs - 如何隔离 React 测试库中的测试?
- react-native - 如何在 React Native 中将视图相互叠加以实现与 Android 原生中的 FrameLayout 相同的效果
- java - 如何获取暴露的肥皂端点
- c++ - Opencv 不适用于套接字连接
- c# - 如何使用参数使用官方 Neo4j .Net 驱动程序更新节点属性
- python - Keras 中的层级联
- python - 按python中的功能按组压缩1-0数组