apache-camel - 如何实现有关多播的路由?
问题描述
我有下面的场景。
- 从客户端系统请求 Web 服务。这个请求是文件将被复制。
- 在应用程序中接收 cxf 组件的请求。
- 收到请求后立即响应表示成功的返回码。
- 发送响应后,应用程序将获取文件。
所以,我实施了路线。
<route>
<from uri="cxf:bean:FileTransferServiceEndPoint"/>
<multicast parellelProcessing="true">
<toD uri="direct:bean"/>
<toD uri="direct:fetchFile"/>
</multicast>
</route>
<route>
<from uri="direct:bean"/>
<bean method="process" ref="returnMsg"/>
<end>
</route>
<route>
<from uri="direct:fetchFile"/>
<pollEnrich>
<simple>file:/test/inBox</simple>
</pollEnrich>
<toD uri="file:/test/outBox"/>
</route>
我遇到了一些问题。最初,我认为该响应将由 returnMsg Bean 返回。但是在文件完全处理之前,响应消息没有响应。我希望消息立即传递给客户。同时,我希望处理这些文件。
我应该如何实现一个路由来实现我的场景?请让我知道这个解决方案。
谢谢你。
解决方案
如果您希望您的“直接”路线彼此独立执行,请考虑使用wireTap
<route>
<from uri="cxf:bean:FileTransferServiceEndPoint"/>
<wireTap uri="direct:bean"/>
<to uri="direct:fetchFile"/>
</route>
来自“行动中的骆驼”一书:
通过使用 Java DSL 中的 wireTap 方法,您可以将交换的副本发送到辅助目的地,而不会影响路由其余部分的行为
推荐阅读
- sql - 结合具有不同 WHERE 原因的 SQL 查询
- google-api - Stenciljs 中的 Google 地址自动完成 api
- r - 使用 dplyr::mutate 重新编码,而不是在函数中工作
- javascript - Javascript不再更新输入字段的值
- r - 单独数据框中的配色方案
- ruby - 当我使用服务时 render :new 不再工作
- c++ - std::source_location 作为非类型模板参数
- terraform - 为什么 Terraform 使用表达式“插值”
- spring-boot - 如何启用 /refresh Actuator 端点并绕过 CSRF 限制?
- java - 使用 bukkit 加载地图的问题