在这里主要介绍beetlex应用网关的两个插件,分别是聚合和url请求过虑.通过聚合插件可以把整合多个请求的数据来应答请求端,而Url请求过虑同可以拒绝一些有非常关键字的请求。
请求聚合
在网关服务中请求聚合是允许把多个请求打包成一个响应给请求方,这样不仅可以节省请求方的请求数量,还可以根据需求的情况整合不同业务数据响应请求。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}" } ] } ]
通过以上介绍组件制定聚合处理是不是非常方便呢,如果想更多了解组件可以访问
url请求过虑
一旦网站部署到互联网上,就会受到一些非法的请求,而这些请求的Url
都是一些特定的路径或带上一些无关请求的字符用于探测一些服务存在的问题;还有这些请求会落到日志中,导致日志臃肿和转发到后台服务带能处理上的损耗。为了应对拦截这些请求不流入到后台节点服务,组件提供了一个插件来解决这一问题。
引用组件
可以通过Nuget
引用BeetleX.Bumblebee.InvalidUrlFilter
,引用之后通过组件加载这个插件的程序集即可:
Gateway.LoadPlugin(typeof(Bumblebee.InvalidUrlFilter.RequestUrlFilter).Assembly);
引用成功后,通过管理插件提供的列表中可以看到
这个插件默认是关闭,如果有需要开启即可。
配置插件
插件默认是不过虑任何请求的Url
,你需要配置一些非常的关键字词组,只要请求的Url
存在这些词组即可被组件拒绝。配置可以点击插件进行配置页面.
可以根据需要来添加一些非常法的关键字,添加完成后保存即可。如果请求的Url
有相关内容即会响应网关错误
只需发简单地配置,就可以过虑一些非法的Url请求