在这里主要介绍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请求

beetlex网关之聚合和url请求过虑的更多相关文章

  1. 《Entity Framework 6 Recipes》中文翻译系列 (21) -----第四章 ASP.NET MVC中使用实体框架之在页面中创建查询和使用ASP.NET URL路由过虑

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 4.2. 构建一个搜索查询 搜索数据是几乎所有应用的一个基本功能.它一般是动态的,因 ...

  2. HttpUrlConnection发送url请求(后台springmvc)

    1.HttpURLConnection发送url请求 public class JavaRequest { private static final String BASE_URL = "h ...

  3. Objective-C中把URL请求的参数转换为字典

    上一篇博客中是把URL转换为字典,那么我们如何把URL请求中的参数封装成字典,然后再封装成数组呢?对OC中字符串操作熟练的小伙伴们应该觉得这是一个a+b的问题,没错把URL中的参数转换为字典主要是对字 ...

  4. AFNETWorking 不支持中文URL请求

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; min-height: 16.0px } p.p ...

  5. SpringMVC学习系列(3) 之 URL请求到Action的映射规则

    在系列(2)中我们展示了一个简单的get请求,并返回了一个简单的helloworld页面.本篇我们来学习如何来配置一个action的url映射规则. 在系列(2)中我们在HelloWorldContr ...

  6. IIS 7.5 + asp.net MVC4 设置路由处理URL请求

    使用asp.net MVC4开发的网站,在本地的VS012环境下运行,一切正常.但当发布到Windows 2008 R2(IIS7.5 + Framework4.5)上时,访问相关网页时,出现有下面的 ...

  7. Request.url请求路径的一些属性

    Request.url请求路径的一些属性1,Request.UrlReferrer.AbsolutePath=获取URL的绝对路径例:"/Manager/Module/OfficialMan ...

  8. java解析出url请求的路径和参数键值对类 - 转

    import java.util.HashMap; import java.util.Map; public class CRequest { /** * 解析出url请求的路径,包括页面 * @pa ...

  9. 无论url请求什么.都可以拼接class类名.实例化.传递get参数-->给当前控制器-->传递给抽象父类-->都交给抽象父类.这个方法去处理call_user_func_array()

    <?phpdefine('DS','/');define('A_PATH',str_replace('\\','/',dirname(__FILE__)).DS); //01获取到主程序目录cl ...

随机推荐

  1. PHP调用纯真IP数据库返回具体地址

    function convertip($ip) { $ip1num = 0; $ip2num = 0; $ipAddr1 =""; $ipAddr2 =""; ...

  2. java表达式和三目运算符

    是由数字.运算符.数字分组符号(括号)等以能求得数值的有意义排列的序列; a + b 3.14 + a (x + y) * z + 100 boolean b= i < 10 && ...

  3. kindeditor编辑器微软雅黑样式font-family值变成&quot;

    http://www.100cm.cn/article-126-764.html kindeditor编辑器中选中文字, 修改字体(字体名称中带有空格, 例如"Microsoft YaHei ...

  4. jq制作tab栏

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 2019-9-2-给博客添加rss订阅

    title author date CreateTime categories 给博客添加rss订阅 lindexi 2019-09-02 12:57:38 +0800 2018-2-13 17:23 ...

  6. Cookie内不能直接存入中文,cookie转码以及解码

    如果在cookie中存入中文,极易出现问题. js在存入cookie时,利用escape() 函数可对字符串进行编码, 用unescape()进行解码 顺序是先把cookie用escape()函数编码 ...

  7. Python工程编译成跨平台可执行文件(.pyc)

    原文:https://blog.csdn.net/zylove2010/article/details/79593655 在某些场景下,若不方便将python编写的源码工程直接给到其他人员,则可以将p ...

  8. linux 系统挂起

    尽管内核代码的大部分 bug 以 oops 消息结束, 有时候它们可能完全挂起系统. 如果系 统挂起, 没有消息打印. 例如, 如果代码进入一个无限循环, 内核停止调度,[15]15 并且系 统不会响 ...

  9. linux oops 消息

    大部分 bug 以解引用 NULL 指针或者使用其他不正确指针值来表现自己的. 此类 bug 通 常的输出是一个 oops 消息. 处理器使用的任何地址几乎都是一个虚拟地址, 通过一个复杂的页表结构映 ...

  10. Linux 标准 C 类型的使用

    尽管大部分程序员习惯自由使用标准类型, 如 int 和 long, 编写设备驱动需要一些小心 来避免类型冲突和模糊的 bug. 这个问题是你不能使用标准类型, 当你需要"一个 2-字节 填充 ...