第五节:基于Ocelot网关简介、路由功能、集成Consul使用

 API是Application Programming Interface缩写,翻译成中文就是应用程序接口。在实际微服务中可以理解一个个功能方法。就比如你一个商品服务的微服务, 可以对外提供 API 接口为,获取商品目录、获取商品详情等。

(2).什么是网关(Gateway)

 它是一个服务器,用来转发其他服务器通信数据的, 它接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。

(3).什么是Api网关

 通俗的来说就是用来限制客户端访问服务端api一道门槛。

2. 微服务架构中为什么要用网关?

(1).在这之前,我们的技术栈中只引入了Consul,客户端访问Consul拿到对应的IP+Port,最终还是要访问业务服务器的,但很多情况我们并不想让业务服务器直接对外开放,所以这个时候就需要引入网关进行转发了.

(2).现在的微服务还没有加权限校验,如果将权限校验加个每个微服务的业务服务器上,开发量很大,这个时候引入网关,可以在网关层校验.

(3).没有网关,很难做限流,而且各个业务的负责人员不能独立负责自己的服务器器。

3. 网关都有哪些作用?

 路由、负载均衡、限流、认证、授权、链路监控、熔断降级、Service Fabric

4. Ocelot相关信息

(1).依赖程序集:通过Nuget安装 【Ocelot 16.0.1】

  GitHub地址:https://github.com/ThreeMammals/Ocelot

(2).参考文档:

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

  ocelot 中文文档:https://blog.csdn.net/sD7O95O/article/details/79623654

  资料:

(3).其他网关框架:

  A. Netflix Zuul +java实现

  B. Kong nginx +lua脚本实现

  C. Tyk go语言开发,收费版本

  D. Ocelot aspnetcore开发的

5. Ocelot的原理

  Ocelot是一堆的asp.net core middleware组成的一个管道。当它拿到请求之后会用一个request builder来构造一个HttpRequestMessage发到下游的真实服务器,等下游的服务返回response之后再由一个middleware将它返回的HttpResponseMessage映射到HttpResponse上。

(1).上游是什么:Ocelot自身就是上游(Upstream)

(2).下游是什么:Ocelot转发给的(业务)服务器就是下游(Downstream)

二. 路由功能

架构图:

第五节:基于Ocelot网关简介、路由功能、集成Consul使用

1.路由的含义

  Ocelot(即上游)按照匹配规则接收客户端发送的请求 将客户端请求转换成业务服务器(即下游)的地址 → 调用下游服务,返回结果  →  Ocelot再将下游服务的结果返回给客户端.

2. 参数介绍

  - Downstream 下游服务配置

  - UpStream 上游服务配置

  - Aggregates 服务聚合配置

  - ServiceName, LoadBalancer, UseServiceDiscovery 配置服务发现

  - AuthenticationOptions 配置服务认证

  - RouteClaimsRequirement 配置Claims鉴权

  - RateLimitOptions 限流配置

  - FileCacheOptions 缓存配置

  - QosOptions 服务质量与熔断

  - DownstreamHeaderTransform 头信息转发

3. 路由直接转发指定的地址

(1).业务场景:

  客户端访问网关 → 网关把请求直接转发给"指定ip+端口"业务服务器 (该场景网关本身不配置Consul,直接转发)

(2).业务编写与测试:

 A. 新建网关项目OcelotGateWay,通过Nuget安装【Ocelot 16.0.1】程序集

 B. 新建一个OcelotConfig.json的配置文件,属性改为"始终复制",用于存放Ocelot的配置。

代码如下:

{ "Routes": [ { //转发下游(业务服务器)的匹配规则 "DownstreamPathTemplate": "/api/{url}", //下游请求类型 "DownstreamScheme": "http", //下游的ip和端口,和上面的DownstreamPathTemplate匹配起来 "DownstreamHostAndPorts": [ { "Host": "127.0.0.1", "Port": 7001 } ], //上游(即Ocelot)接收规则 "UpstreamPathTemplate": "/GoodsService/{url}", //上游接收请求类型 "UpstreamHttpMethod": [ "Get", "Post" ] }, { "DownstreamPathTemplate": "/api/{url}", "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "127.0.0.1", "Port": 7004 } ], "UpstreamPathTemplate": "/OrderService/{url}", "UpstreamHttpMethod": [ "Get", "Post" ] } ] }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzdydf.html