1.简介

Ocelot原本设计仅为与.NET Core一起使用的,它是一个.NET API网关,作为面向使用.NET运行微型服务/面向服务的体系结构需要统一的系统入口点,即当客户端(Web站点,手机APP)等访问Web API的时候,Ocelot作为统一的入口点会根据请求地址分发到对应的API站点去(寻址)。而Ocelot还集成很多功能,例路由,认证,授权,限速等等功能点,Ocelot官网还建议认证这块最好跟身份验证(IdentityServer4)一起使用,承载令牌轻松集成。具体详情大家可以去官网(https://ocelot.readthedocs.io/en/latest/introduction/bigpicture.html)了解下。
而查看Ocelot源码,我们会看到Ocelot是按特定顺序排列的一堆中间件(Middleware)组成的管道。
Ocelot将HttpRequest对象操作到由其配置指定的状态,直到到达请求构建器中间件,在中间件中它创建一个HttpRequestMessage对象,该对象用于向下游服务发出请求。发出请求的中间件是Ocelot管道中的最后一件事。它不会调用下一个中间件。来自下游服务的响应存储在每个请求范围的存储库中,并在请求返回Ocelot管道时进行检索。有一块中间件将HttpResponseMessage映射到HttpResponse对象,然后将其返回给客户端。

2.Ocelot配置

根据官网介绍,Ocelot有五种配置:

2.1基础集成(Basic Implementation)


当客户端访问下游服务站点时候,会统一经过Ocelot网关,Ocelot网关Host主机首先会读取configuration.json配置信息,根据配置文件去寻找对应下游服务站点并返回处理结果给客户端。这一个过程可以称为路由寻址。

2.2集成IdentityServer(With IdentityServer)


当服务站点涉及认证跟授权的时候,可以通过在Ocelot网关上集成IdentityServer,当客户端访问下游服务站点时候,会先通过IdentityServer认证跟授权后才分发到下游服务站点。

2.3多个网关实例集群(Multiple Instances)


单个Ocelot网关是比较危险的,如果这个网关挂掉了,所有下游服务站点都将无法访问,这样子是无法做到高可用的。要解决这个问题,可以部署多台Ocelot网关集群,而Ocelot也集成了负载均衡器。

2.4集成Consul服务发现(With Consul)


查看官网文档负载均衡这一栏目,我们知道Ocelot已经支持简单的负载功能,当下游站点存在多个服务结点的时候,Ocelot能够承担起负载均衡的作用。但是它不提供健康检查,服务的注册也只能通过手动在配置文件里面添加完成。这不够灵活并且在一定程度下会有风险。这个时候我们就可以用Consul来做服务发现,它能与Ocelot完美结合。

2.5集成Service Fabric(With Service Fabric)


如果您在Service Fabric中部署了服务,则通常将使用命名服务来访问它们。

3.总结

Ocelot网关是系统给外部唯一访问入口,就好比公司的门卫承担着寻址、出入限制、安全检查、位置引导等等功能。它还提供了路由,身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理等等功能。Ocelot网关的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。通常网关也是提供REST/HTTP的访问API,服务端通过网关注册和管理服务。该章节之后,我会继续根据GitHub贡献者开源项目上面Ocelot Demo实例介绍它的功能。Ocelot Demo地址https://github.com/catcherwong-archive/APIGatewayDemo。

参考文献:
Ocelot官网

(1)ASP.NET Core3.1 Ocelot介绍的更多相关文章

  1. (8)ASP.NET Core3.1 Ocelot Consul服务注册与发现

    1.服务注册与发现(Service Discovery) ●服务注册:我们通过在每个服务实例写入注册代码,实例在启动的时候会先去注册中心(例如Consul.ZooKeeper.etcd.Eureka) ...

  2. (2)ASP.NET Core3.1 Ocelot路由

    1.路由 前一个章节我们已经介绍过Ocelot,相信大家也了解到,Ocelot的主要功能是接收客户端等传入的HTTP请求,并将其转发到下游服务.Ocelot当前仅以另一个http请求的形式支持此功能( ...

  3. (3)ASP.NET Core3.1 Ocelot认证

    1.认证 当客户端通过Ocelot访问下游服务的时候,为了保护下游资源服务器会进行认证鉴权,这时候需要在Ocelot添加认证服务.添加认证服务后,随后使用Ocelot基于声明的任何功能,例如授权或使用 ...

  4. (5)ASP.NET Core3.1 Ocelot服务质量

    1.服务质量(Quality of Service) 对于微服务来说,熔断就是我们常说的"保险丝",意思是当服务出现某些状况时候,通过切断服务防止应用程序不断地执行可能会失败的操作 ...

  5. (4)ASP.NET Core3.1 Ocelot负载均衡

    1.负载均衡 Ocelot可以在每个路由的可用下游服务中实现负载均衡,这使我们更有效地选择下游服务来处理请求.负载均衡类型:●LeastConnection:根据服务正在处理请求量的情况来决定哪个服务 ...

  6. (7)ASP.NET Core3.1 Ocelot Swagger

    1.前言 前端与后端的联系更多是通过API接口对接,API文档变成了前后端开发人员联系的纽带,开始变得越来越重要,而Swagger就是一款让你更好的书写规范API文档的框架.在Ocelot Swagg ...

  7. 探索Asp net core3中的 项目文件、Program.cs和通用host(译)

    引言 原文地址 在这篇博客中我将探索一些关于Asp.net core 3.0应用的基础功能--.csproj 项目文件和Program源文件.我将会描述他们从asp.net core 2.X在默认模版 ...

  8. 《Asp.Net Core3 + Vue3入坑教程》-Net Core项目搭建与Swagger配置步骤

    简介 <Asp.Net Core3 + Vue3入坑教程> 此教程仅适合新手入门或者前后端分离尝试者.可以根据图文一步一步进操作编码也可以选择直接查看源码.每一篇文章都有对应的源码 教程后 ...

  9. ASP原码加密工具介绍

    ASP原码加密工具介绍 总是会有非常多方法暴露ASP的原程序.造成数据库的password 路径都能够轻易被其它人搞到,所以对ASP程序实行加密处理是个不错的解决方法.以下来介绍一个工具假设大家感兴趣 ...

随机推荐

  1. Linux下彻底删除安装的rpm包

    如何彻底Linux系统下安装的rpm包?现以mySQL为例进行介绍: 一.使用以下命令查看mysql安装情况 [root@xpq mysql]# rpm -qa|grep -i mysql MySQL ...

  2. C++中的In 和 Out用法

    参考:https://zhidao.baidu.com/question/541219383.html In 这是一个宏,它的实际意义就是告诉你,这个变量或参数是输入值,即你必须给这个变量填写好以后提 ...

  3. puts()和gets()函数

    puts()和gets()函数 1. puts()函数 puts()函数用来向标准输出设备(屏幕)写字符串并换行, 其调用格式为: puts(s); 其中s为字符串变量(字符串数组名或字符串指针). ...

  4. 微型直流电机控制基本方法 L298N模块

    控制任务 让单个直流电机在L298N模块驱动下,完成制动.自由停车,正反转,加减速等基本动作 芯片模块及电路设计 图1 L298N芯片引脚 图2 L298N驱动模块 表1 L298N驱动模块的控制引脚 ...

  5. STM32F103C8T6-CubeMx串口收发程序详细设计与测试(2)——程序规划、代码编写及测试

    摘要:演示程序的功能:通过中断接收串口数据,在1750us时间内没有收到新的字节的话,将收到的数据原封不动地发送出去,以测试串口的完整收发流程.对使用到的函数进行了说明,阐述了各个函数的调用顺序和调用 ...

  6. MinGW与Cygwin的关系与差别

    PART1 共同点 Cygwin / GCC和MinGW都是gcc在WINDOWS下的实现. gcc:它是一款原来只能在Linux系统上使用的开源C语言编译器,后来移植到了Windows操作系统上(以 ...

  7. 用cmd下载tp5.0版本

    1.首先进入phpstudy的www目录 composer create-project topthink/think=5.0.* pt5.0的名字 --prefer-dist $ composer ...

  8. HTML常用标签(下)

    HTML常用标签(下) 1. 表格标签 1.1 语法 <table> <!--table定义表格--> <tr> <!--tr定义表格中的行--> &l ...

  9. 多测师讲解python _unttest框架002(结合项目实战)_高级讲师肖sir

    第一种调用方法: if __name__ == '__main__':# #第一种运行方法:运行所有的用例 import unittestfrom selenium import webdriverf ...

  10. Java代码实现计算器加减乘除简易功能

    package test; import javax.swing.; import java.awt.; import java.awt.event.KeyAdapter; import java.a ...