前言

书接上文,上文书说到:微服务架构概念、优缺点、划分原则以及技术选择,既然指导思想有了,那就用实践学习来检验。

一,网关API

1,何为网关API?

网关网关API——整个系统的统一入口,往上,接收一切外界请求;往下,通知内部所有服务。简单来讲就是一个“门”。

2,网关API功能作用

(1)身份认证与授权

这“家”里穷不穷富不富的先不说,有门了就不能随便让人进,这要来坏人那就得出事,所以得给门加个锁,有钥匙(token)的您里面请,没钥匙的........

当然了进来了也让人随便跑,这“二奶奶”能不能去“大奶奶”的房还得看老爷的意思,为了家里和谐还是各自回厢房歇着。

身份认证与授权:保证系统安全访问

(2)负载均衡

老爷家挺大的,一到过年过节家里客人也多;家里大少爷饱读诗书又有功名在身,平时喜好交朋友;老爷甚是喜欢老早就把东西厢房给了他;

看门的一听是找大少爷的,不是让去东厢房就是让去西厢房,把这人情事故处理的妥妥当当的。

(3)访问限流

看门的这来的人太多把门都快挤坏了,赶紧把情况报告给老爷,老爷一方面怕大少爷会客累坏身子,另一方面怕门出问题这都是事;

“今日各位朋友远道而来,令寒舍蓬荜生辉倍感荣幸,大家的热情鄙人和犬子都感受到,奈何这家小门小实在照顾不周,眼看天色也不早了,、

还请离家近的朋友把机会留给远方的朋友,远方的朋友也请你们排排队 这样也能快一点把事办了”老爷说完一拱手就见门口的情况好了很多,转身就回屋了。

......东街李员外意外路过看了十分眼红,心里暗下决定赶明照着这个给也弄一个。。。

二,Ocelot网关搭建

李员外也是实干主义的人说干就干,上到性能检查下到实施全部亲力亲为,最终综合考虑就用Ocelot

官网:https://ocelot.readthedocs.io/

1,第一步创建一个.net core web 项目

  

微服务网关限流 微服务api网关_负载均衡

 2.使用 NuGet安装Ocelot的相关组件
  

微服务网关限流 微服务api网关_c#_02

  因为框架使用的是 .net core 3.1 所以只能安装16.0一下版本,,,

 3,修改程序配置 

   在startup 里面添加ocelot服务

     

微服务网关限流 微服务api网关_微服务网关限流_03

       在Program 里面添加ocelot配置

   

微服务网关限流 微服务api网关_API_04

    ocelot.json:


{ "Routes": [ { "DownstreamPathTemplate": "/product/{path}", "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 4001 }, { "Host": "localhost", "Port": 4002 } ], "UpstreamPathTemplate": "/api/product/{path}", "UpstreamHttpMethod": [ "Get", "Post" ], "LoadBalancerOptions": { "Type": "RoundRobin" } }, { "DownstreamPathTemplate": "/order/{path}", "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 4050 } ], "UpstreamPathTemplate": "/api/order/{path}", "UpstreamHttpMethod": [ "Get", "Post" ], "LoadBalancerOptions": { "Type": "RoundRobin" } } ], "GlobalConfiguration": { "BaseUrl": "http://localhost:4000" } }


 参数说明:
  DownstreamPathTemplate:下游具体服务地址,{path}占位变量,"path"可以是其他字符支持自定义

  DownstreamScheme:下游请求方案,可以使用:http/https

  DownstreamHostAndPorts:下游服务的主机和端口集合,对下游服务的请求进行负载平衡, Ocelot 允许添加多个条目,然后选择一个负载平衡器

  UpstreamPathTemplate:上游路径地址,上游的路径无需和下游一致

  UpstreamHttpMethod:上游接受请求方式集合:[ "Get", "Post", "Put", "Delete" ]

  LoadBalancerOptions:负载均衡平衡器,4个参数可选RoundRobin - 循环访问,NoLoadBalancer - 从配置或服务发现中获取第一个可用服务,"LeastConnection" 请求最少的服务发送新请求,

  CookieStickySessions - 使用 cookie 将所有请求粘贴到特定服务器

  GlobalConfiguration:全局配置,BaseUrlocelot网关运行的地址

  

  其中product 设置使用两个端4001,4002 模拟负载均衡,按上述简单配置不出问题运行效果如下:
  

  

微服务网关限流 微服务api网关_c#_05

微服务网关限流 微服务api网关_API_06

 客户端对服务的调用使用网关进行统一中转,简化客户端请求配置,服务端也做跨域也方便,避免了服务地址直接暴露

 如果ocelot.json 中下游端口等其他的配置经常变化修改对整个系统并不是很友好,所以Ocelot 允许指定服务发现提供者,并将使用它来查找 Ocelot 将请求转发到的下游服务的主机和端口