API网关—Ocelot

  • API网关
  • Ocelot
    • Ocelot的基本使用

API网关

我们知道在微服务架构中,后端会有许许多多的服务实例,但是在UI上进行展示的时候,我们通常需要在一个界面上展示很多数据,这些数据可能来自于不同的微服务中。这就会出现一下的这种情况:

这种情况下,前端UI展示需要知道数据来源于哪个服务,需要知道每一个服务的ip和端口,但是按照微服务的设计原则,服务的划分是随时间变化的,服务实例也是可以伸缩的,也就是后端接口的IP和端口是不固定的,这将会导致前端UI展示多了很多不确定的因素。

而API网关就是这场景下的一个解决方案,它充当了多个服务的大门,整个微服务架构的统一入口,从面向对象设计的角度看,它与外观模式类似,封装了系统的内部复杂结构,同时它还可以承担其他的一些职责,处理非业务功能,实现各个微服务公共的功能。


API网关应该包含如下一些功能:

  1. 请求转发,统一对外接口

    将前端请求的Http Api按照一定的规则转发到内部对于的服务,并将结果返回到前端

  2. 负载均衡
    在同一个服务存在多个实例的情况,根据一定规则将Http Api请求合适的分配到不同实例中,以应对高并发的情况

  3. 限流熔断
    限制同一个API接口一定时间内的请求次数,避免请求过于频繁,后端服务处理不过来,在后端服务出现故障时,直接截断请求,不往后端服务转发

  4. 认证鉴权
    进行统一的认证鉴权,免去各个服务的重复认证

  5. 监控
    对服务调用链路进行跟踪监控

Ocelot

Ocelot是一个使用.NET Core平台上的一个开源的API Gateway,包含了路由转发、负载均衡、限流熔断等功能,并且集成了IdentityServer(身份验证)和Consul(服务注册发现)。以下示例基于Ocelot 17.0.1版本。

Ocelot的基本使用

  1. 准备一个API服务
    创建一个Asp.Net Core WebAPI项目,修改一下默认接口

  2. 创建网关应用
    (1)新建一个Web API项目
    (2)安装 Ocelot 依赖包

    Install-package Ocelot
    

    (3)添加配置信息
    在appsetting.json中加入Ocelot配置信息,也可以单独创建一个ocelot.json配置文件,单独创建文件的时候记得在主机启动的时候读取配置文件,并且注意将配置文件设置为较新则复制

    "Routes": [{"UpstreamPathTemplate": "/Customer/{url}", // 外部应用对于的url模板"UpstreamHttpMethod": [ "Get", "Post" ],"DownstreamPathTemplate": "/{url}", // 内部服务实际对于的url模板"DownstreamScheme": "http","DownstreamHostAndPorts": [ // 内部服务对于的ip和端口{"Host": "localhost","Port": "5000"}]}]
    

    Ocelot配置文件中包含两个根节点: Routes和GlobalConfiguration。Routes是一个数组,其中的每一个元素代表了一个路由,我们可以针对每一个路由进行以上功能配置。而GlobalConfiguration可以设置一些全局配置,对每个路由都有效。这里演示路由转发,暂不涉及全局配置的部分。配置项的详细信息请见官方文档:

    4)添加依赖注入

    public void ConfigureServices(IServiceCollection services)
    {services.AddOcelot(Configuration);services.AddControllers();services.AddSwaggerGen(c =>{c.SwaggerDoc("v1", new OpenApiInfo { Title = "OcelotGateWay", Version = "v1" });});
    }public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {if (env.IsDevelopment()){app.UseDeveloperExceptionPage();app.UseSwagger();app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "OcelotGateWay v1"));}app.UseHttpsRedirection();app.UseRouting();app.UseAuthorization();app.UseOcelot().GetAwaiter().GetResult();//app.UseEndpoints(endpoints =>//{//    endpoints.MapControllers();//});
    }
    

    5)启动两个应用

    在vs中通过设置启动项目,设置CustomerService先启动,OcelotGateWay后启动,然后通过postman,根据url模板通过OcelotGateWay请求CustomerService中的API接口

    注意这里5001是网关的端口,当外部应用通过符合配置的url模板请求网关时,Ocelot把客户端对网关的请求(Request),按照配置文件中的映射关系,转发给对应的后端http service,然后从后端http service获取响应(Response)后,再返回给客户端。对于外部应用而言,不需要记住每个service所在的IP和端口,而是只需要告诉网关我需要消费哪个service即可。这就是一个网关最基本的功能。

微服务系列文章:
上一篇:配置中心—Consul配置管理
下一篇:API网关—Ocelot之服务发现

API网关—Ocelot相关推荐

  1. .NET Core开源API网关 – Ocelot中文文档

    Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断.并内置了负载均衡器与Service Fabric.Butterfly ...

  2. API网关—Ocelot之负载均衡

    API网关-Ocelot之负载均衡 负载均衡 请求缓存 负载均衡 分布式架构中,当后端同一个应用的实例较多,负载均衡是非常必要的,否则前端对后端API的请求,可能只命中其中的几个应用实例,这几个实例压 ...

  3. API网关—Ocelot之服务发现

    API网关-Ocelot之服务发现 集成Consul 集成nacos 动态路由 扩展Ocelot对注册中心的适配 通过配置文件,我们可以设定路由规则模板,Ocelot网关会将接收到的符合规则的请求转发 ...

  4. 一日一技:ASP.NET Core Api网关Ocelot初探

    概述 Ocelot面向使用.NET运行微型服务/面向服务的体系结构的人员,这些体系结构需要在系统中具有统一的入口点.特别是我想与IdentityServer参考和承载令牌轻松集成.Ocelot是按特定 ...

  5. [Hei-Ocelot-Gateway ].Net Core Api网关Ocelot的开箱即用版本

     写在前面 很多neter都有在用Ocelot做Api网关,但是Ocelot又不像kong或者其他网关一样,开箱即用.它需要你单独开一个web项目来部署,这样很多同学都在做重复的事了. 这里[Hei ...

  6. 『Ocelot』.NET开源API网关 – Ocelot详细使用及其说明(可当文档收藏使用)

    Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断.并内置了负载均衡器与Service Fabric.Butterfly ...

  7. API网关Ocelot 使用Polly 处理部分失败问题

    在实现API Gateway过程中,另外一个需要考虑的问题就是部分失败.这个问题发生在分布式系统中当一个服务调用另外一个服务超时或者不可用的情况.API Gateway不应该被阻断并处于无限期等待下游 ...

  8. .NET Core API网关Ocelot(十四)【转换Claims,日志,跟踪】

    Ocelot允许用户访问claims并把它们转换到头部,请求字符串参数和其他claims中.这仅在用户通过身份验证后才可用. 用户通过身份验证之后,我们运行claims转换中间件.这个中间件允许在授权 ...

  9. ASP.NET Core Api网关Ocelot的中文文档

    架构图 入门 不支持 配置 路由 请求聚合 GraphQL 服务发现 微服务ServiceFabric 认证 授权 Websockets 管理 流量控制 缓存 QoS服务质量 转换Headers 转换 ...

最新文章

  1. 推荐一个工作流自动化工具
  2. 文本分类之特征简约算法说明
  3. java 右移两位_java左移右移运算符
  4. 前端学习(764):创建对象的三种方式
  5. java excel 兼容问题_java--POI解析excel兼容性问题
  6. 华为P10的内存门和闪存门的检测方法
  7. bzoj 3503: [Cqoi2014]和谐矩阵(高斯消元)
  8. Python Django 之 jQuery
  9. 计算机更新bios,win7bios升级教程_win7电脑主板bios升级的方法
  10. unity3D-learning:UI背包系统
  11. linux下同时装ananocda2和anaconda3通过修改.bashrc文件进行切换
  12. C语言如何制作dIL文件,C语言怎么加循环
  13. ES5和ES6的继承有哪些优劣?
  14. Java实现单向链表基本功能
  15. viewflip和viewpage
  16. 三维重建算法综述|传统+深度学习
  17. IDEA通过插件安装Gitee并clone项目
  18. HTML5前端视频_Vue项目实战《硅谷外卖》-张晓飞-专题视频课程
  19. MIT缺失的一课——Lecture1:Shell
  20. SpringBoot 定时器的三种方式

热门文章

  1. PPS优化安装版和暴风影音优化安装版
  2. VR普及成视频主流,TSINGSEE青犀视频云服务将从EasyPlayer.js播放器支持VR播放启动VR研发
  3. 三角形与圆的相交问题
  4. 嘀嗒出行能识别手机卡吗_面具竟然能替代人脸解锁手机!人脸识别还安全吗?|人脸识别|手机|面具|人脸识别系统...
  5. 自制编程语言crowbar(v0.1)构建解析器时分配内存
  6. 百度地图MapV实现海量数据画线、点聚合等功能
  7. android textview 字体阴影,TextView加文字阴影
  8. asp.net mvc4 修改密码界面
  9. 淘宝、1688代购系统;微信代购小程序,代购系统源代码,PHP前端源码演示
  10. UC Berkeley 马毅:深度学习的第一性原理