spring-boot - 拆分请求 - 发送到一个或不同的端点 - 合并响应
问题描述
我正在使用 spring boot 2 和 apache camel 2.24 构建一个 api 网关,它公开 REST 端点以接收 JSON/XML 请求并执行以下操作
- 验证传入的 JSON/XML
- 将传入请求转换为下游预期格式。
- 将请求推送到调用下游 REST 端点并返回响应的骆驼路由。
- 将响应转换为预期格式并返回给客户端。
目前我的路线配置如下
from("direct::camel").process(preprocessor).process(httpClientProcessor).process(postprocessor);
httpClientProcessor - 这主要工作是调用下游端点并返回响应。
预处理器 - 将请求拆分为已配置的请求,在传递给 httpClientProcessor 之前将它们放入列表中。
后处理器 - 根据内容类型执行以下操作
- XML - 从单个响应中删除“xml”标签,并在一个根元素下组合形成一个单个响应
- JSON - 在一个父数组元素下组合 json 响应。
可能存在多个请求需要发送到同一个端点或每个请求都发送到唯一端点的情况。目前我在 httpClientProcessor 中有这个逻辑。这种方法的一个问题是我只能一个接一个地调用下游端点,而不是并行调用(除非我在 httpClientProcessor 中添加线程池执行器)
我是 apache camel 的新手,因此从这个基础路由配置开始。根据阅读文档,我遇到了骆驼组件,如 split()、parallelProcessing()、多播和骆驼的聚合器组件,但我不知道如何将这些全部组合在一起以实现我的要求 -
使用预配置的分隔符拆分传入请求以创建多个请求。传入的请求可能有也可能没有多个请求。
根据端点 url 配置,将所有拆分请求发布到同一端点或将每个请求发布到唯一端点。
将所有响应组合成一个主响应(XML 或 JSON)作为路由的输出。
请指教。
解决方案
这听起来像你应该看看Camel Split EIP。
尤其
对于动态下游端点,您可以使用动态 To ( .toD(...)
) 或Recipient List EIP。后者甚至可以将消息发送到多个端点或没有端点。
推荐阅读
- css - CSS父级与子对象宽度相同?
- ruby-on-rails - 在每个非管理页面中加载 Activeadmin 资产
- php - 为什么 CI 创建一个新行而不是更新?
- javascript - 我想知道我在表格中按下的按钮的值
- android - 无法在 Kotlin 中对 Livedata 观察方法使用 lambda 箭头表达式
- git - 不提交以前的提交,我只想添加一个提交,该提交包含在我合并的另一个分支上所做的所有其他更改?
- mapbox-gl-js - 访问 TileSet 的嵌套属性
- react-native - React Native:由于内存泄漏而无法执行更新
- android - 如何覆盖模块中的 gradle 子项目配置?
- html - 在选择器不起作用之前使用按钮顶部的按钮标签