apache-camel - Apache Camel:根据值切换路由
问题描述
我是 Apache Camel 的新手,并试图找出基于某些值配置切换路由的最佳方法。
我现在做的是:
- 从 Kafka 中检索数据
- 然后,在控制器中处理,在header中放入一定的值(这里我感觉有些不对劲)
- 处理控制器输出头并检查值
- 根据标头的值选择要走的路线
this.from("direct:kafka.scenario.update").routeId("publish.scenario.kafka.controller.route")
.log(LoggingLevel.INFO, "Send Scenario update 2 Kafka Route").process(this.publishScenarioUpdateKafkaController).choice()
.when( simple( "${out.header.updateType} == '" + ChangeType.UPDATE + "'" ))
.process(this.publishVmsUpdateKafkaController)
.to(dataRefScenarioUpdateProducerRoute)
.when( simple( "${out.header.updateType} == '" + ChangeType.CREATE + "'" ))
.process(this.publishVmsUpdateKafkaController)
.to(dataRefScenarioCreateProducerRoute)
.when( simple( "${out.header.updateType} == '" + ChangeType.DELETE + "'" ))
.process(this.publishVmsUpdateKafkaController)
.to(dataRefMessageDeleteProducerRoute);
有什么想法吗?
解决方案
您正在实施基于内容的路由器 EIP,我相信您的方法是正确的。您可以随时使用CamelTestSupport
来测试您的RouteBuilders
.
可能的警告:请查看是否.when()
检查out.header.updateType
调用exchange.getOut()
(我不记得确切),如果确实如此,您可能会丢失消息中的重要信息IN
。这可能会导致意外结果。这只是一个警告,您可能已经知道其中的区别。如果您还没有这样做,请确保访问并理解此页面。
推荐阅读
- maven - SERENITY_FORK_NUMBER Serenity-BDD Cucumber Maven RestAssured
- bash - 仅通过文件名识别早于 x 个月的文件并删除它们
- laravel - @生产脚本失败。运行 npm run production 时出错
- python - 如何在python中计算数值导数的边界点?
- r - 在 data.table 中嵌入聚合函数时,case_when 很慢
- javascript - 在nodejs / javascript中的excel中创建动态列数或标题
- java - 如果字符串匹配条件并生成列表中值的逗号分隔列表,则为字符串添加后缀的最佳方法
- python - 如果键匹配,如何加入字典的值
- android - 新一代 Google App Bundle 中是否还需要 mdpi 或 xdpi 资源文件?
- r - 在现有图上添加线条的框架:ggplot 中的“点”和“图”