在网关服务中请求聚合是允许把多个请求打包成一个响应给请求方,这样不仅可以节省请求方的请求数量,还可以根据需求的情况整合不同业务数据响应请求。BeetleX.Bumblebee
虽然并没有内置这一功能,但可以通过扩展的形式来支持请求聚合,接下来就介绍一下组件的聚合插件使用。
引用插件
可以通过Nuget
安装最新版本BeetleX.Bumblebee.Aggregation
,安装后通过网关加载插件(需要更新BeetleX.FastHttpApi 到1.7.7.8)
gateway.LoadPlugin(typeof(Bumblebee.Aggregation.Aggregate).Assembly);
注册了插件后,可以在管理的插件页面看到相关插件
插件默认是不启用,启用前需要配置相关的Url
聚合。
应用需求
现在有两个请求,一个是获取雇员信息,另一个则获取雇员相关订单,情况如下:
http://192.168.2.25:9090/employee/2
http://192.168.2.26:9090/orders/2
接下来希望访问以下地址来整合两个接口的数据输出
http://host/GetEmployeeOrders?id=2
配置
接下来根据上面的情况来制定一个聚合配置,点击插件进行配置页面
配置信息是一个数组结构,可以根据需要来定义多个聚合请求路径。Url
表示聚合的请求路径,OutputError
用于描述如果某个请求有错误是否把错误输出,Actions
相应聚合的多项请求地址。针对刚提到的需要配置如下:
[{"Url": "/GetEmployeeOrders","OutputError": true,"Actions": [{"Name": "Employee","Host": "http://192.168.2.25:9090","Url": "/employee/{id}"},{"Name": "Orders","Host": "http://192.168.2.26:9090","Url": "/orders/{id}"}]}
]
配置支持通过{xxx}
的方式把请求的参数传递到聚合请求中。接下来尝试访问一下/GetEmployeeOrders
(注意要先启用插件)
由于没有带上参数所以访问返回了404
,接下来带上正式的参数
当提供正确的参数后就把请求数据聚合到正常结果输出
不输出错误
有时候为了方便处理不想输出错误,当聚合Url
有错误只响应null
。这样只需要把OutputError
调整一下即可
[{"Url": "/GetEmployeeOrders","OutputError": false,"Actions": [{"Name": "Employee","Host": "http://192.168.2.25:9090","Url": "/employee/{id}"},{"Name": "Orders","Host": "http://192.168.2.26:9090","Url": "/orders/{id}"}]}
]
通过以上介绍组件制定聚合处理是不是非常方便呢,如果想更多了解组件可以访问
http://beetlex.io