一、介绍

Ocelot 是基于.NetCore实现的开源的API网关,支持IdentityServer认证。Ocelot具有路由、请求聚合、服务发现、认证、鉴权、限流熔断等功能,并内置了负载均衡器与Service Fabric、Butterfly Tracing集成。

Ocelot本质是由一系列特定顺序的.Net Core Middleware组成的一个管道。Ocelot接收到请求之后,用request bulider来创建一个HttpRequestMessage对象,该对象根据配置将请求下发给下游指定的服务器进行请求处理。下游服务返回response之后,一个middleware将它返回的HttpResponseMessage 映射到HttpResponse,再转发给客户端。

二、如何搭建一个Ocelot项目

新建一个.net core 项目。我的环境是:vs2017,.net core 2.1,Ocelot 8.0。

NuGet安装Ocelot

添加完项目之后添加ocelot.json配置文件

{
"ReRoutes": [
{
"DownstreamPathTemplate": "/api/values", // 下游游请求模板
"DownstreamScheme": "http", //下游服务 schema
"UpstreamPathTemplate": "/api/values", // 上游请求模板
"UpstreamHttpMethod": [ "Get" ], // 上游请求http方法
//下游服务的地址,如果使用LoadBalancer的话这里可以填多项
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 8802
}
],
//LeastConnection – 将请求发往最空闲的那个服务器
//"RoundRobin""轮流发送"
//"NoLoadBalance" "总是发往第一个请求或者是服务发现",
"LoadBalancer": "LeastConnection",
//熔断配置
"QoSOptions": {
"ExceptionsAllowedBeforeBreaking": 3, //允许的异常请求数
"DurationOfBreak": 10, //熔断的时间,单位为秒
"TimeoutValue": 5000 //如果下游请求的处理时间超过多少则将请求设置为超时
},
//缓存配置
"FileCacheOptions": {
"TtlSeconds": 10,
"Region": "somename" //是对缓存进行的一个分区
},
"HttpHandlerOptions": {
"AllowAutoRedirect": false,
"UseCookieContainer": false
},
//配置服务认证
"AuthenticationOptions": {
"AuthenticationProviderKey": "",
"AllowedScopes": []
}
},
{
"DownstreamPathTemplate": "/api/product",
"DownstreamScheme": "http",
"UpstreamPathTemplate": "/api/product",
"UpstreamHttpMethod": [ "Get" ],
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 8801
}
],
"QoSOptions": {
"ExceptionsAllowedBeforeBreaking": 3,
"DurationOfBreak": 10,
"TimeoutValue": 5000
},
"AuthenticationOptions": { }
}
],
"GlobalConfiguration": {
"RequestIdKey": "OcRequestId",
"AdministrationPath": "/admin"
}
}

将配置文件加入Configuration

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostcontext, bulid) => {
bulid.SetBasePath(hostcontext.HostingEnvironment.ContentRootPath)
.AddJsonFile("ocelot.json");
})
.UseKestrel()
.UseIISIntegration()
.UseStartup<Startup>();
}

添加依赖注入

       public void ConfigureServices(IServiceCollection services)
{
services.AddOcelot();
}

添加Ocelot中间件

   public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
} app.UseOcelot().Wait();
}

添加两个下游api服务,对应ocelot.json配置的下游服务

设置APIProductService端口为8801APIUserServiec端口为8802APIGateway端口为5000,设置方式如图所示:

启动项目设置为启动多个项目

启动项目

请求结果如下




http://localhost:5000/api/values请求转发给了下游服务APIUserServiec处理

将请求 http://localhost:5000/api/product 转发给了APIProductService服务进行处理

三、参考

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

[2] Ocelot GitHub

初探.Net Core API 网关Ocelot(一)的更多相关文章

  1. Asp.Net Core API网关Ocelot

    首先,让我们简单了解下什么是API网关? API网关是一个服务器,是系统的唯一入口.从面向对象设计的角度看,它与外观模式类似.API网关封装了系统内部架构,为每个客户端提供一个定制的API.它可能还具 ...

  2. Net Core API网关Ocelot

    Ocelot在github的地址 https://github.com/TomPallister/Ocelot , 非常给力的是在课程当天完成了.NET Core 2.0的升级,升级过程请看https ...

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

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

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

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

  5. .NET Core 微服务—API网关(Ocelot) 教程 [二]

    上篇文章(.NET Core 微服务—API网关(Ocelot) 教程 [一])介绍了Ocelot 的相关介绍. 接下来就一起来看如何使用,让它运行起来. 环境准备 为了验证Ocelot 网关效果,我 ...

  6. .NET Core 微服务—API网关(Ocelot) 教程 [三]

    前言: 前一篇文章<.NET Core 微服务—API网关(Ocelot) 教程 [二]>已经让Ocelot和目录api(Api.Catalog).订单api(Api.Ordering)通 ...

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

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

  8. .Net Core的API网关Ocelot使用 (一)

    1.什么是API网关 API网关是微服务架构中的唯一入口,它提供一个单独且统一的API入口用于访问内部一个或多个API.它可以具有身份验证,监控,负载均衡,缓存,请求分片与管理,静态响应处理等.API ...

  9. .NET Core 微服务—API网关(Ocelot) 教程 [一]

    前言: 最近在关注微服务,在 eShop On Containers 项目中存在一个API网关项目,引起想深入了解下它的兴趣. 一.API网关是什么 API网关是微服务架构中的唯一入口,它提供一个单独 ...

随机推荐

  1. 正则表达式替换字符串中的html标签

    正则表达式替换字符串中的html标签 ··· var newStr = str.replace(/<[^>]+>/g, ''); ···

  2. C++——变量

    1.变量的初始化和赋值 初始化:创建变量时赋予一个初始值 赋值:把变量的当前值擦除,以新的值替代 2.变量的声明和定义 声明:名字为程序所知.如果一个程序要使用另一个程序的名字,则要包含对那个名字的声 ...

  3. 4、APP FPS测试

    什么是FPS FPS是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数.FPS是测量用于保存.显示动态视频的信息数量.每秒钟帧数愈多,所显示的动作就会愈流畅.通常,要避免动作不 ...

  4. Nginx 配置参数

    1 Proxy_send_timeout 定义后端在多久的时间内必须返回完所有的数据给Nginx. 2 Proxy_read_timeout

  5. 梯度下降:SGD vs Momentum vs NAG vs Adagrad vs Adadelta vs RMSprop vs Adam

    原文地址:https://www.jianshu.com/p/7a049ae73f56 梯度下降优化基本公式:\({\theta\leftarrow\theta-\eta\cdot\nabla_\th ...

  6. 获取hdfs集群信息(fs.defaultFS)

    [root@hive-dp-7bd6fd4d55-wctjn hive-1.1.0-cdh5.14.0]# hdfs getconf -confKey fs.default.name19/12/04 ...

  7. ActionContext 与 ServletActionContext获取Session的异同

    1. ActionContext 在Struts2开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在Action里直接获取请求(Request)或会话(Session)的一些信息, ...

  8. PS--工具类

    1.移动工具 快捷点Vctrl + 点击想要移动的图层.选中后,就可以移动了. 2.选取工具 快捷键M2.1选取后填充颜色:新建图层 选取 右键填充 添加前景色 2.2两块选区选择一个选区后,属性面板 ...

  9. Yacc - 一个生成 LALR(1) 文法分析器的程序

    SYNOPSIS 总览 yacc [ -dlrtv ] [ -b file_prefix ] [ -p symbol_prefix ] filename DESCRIPTION 描述 Yacc 从 f ...

  10. Linux 进程间通信 信号灯集

    1.特点:  信号灯集,是控制访问临界资源 信号灯(semaphore),也叫信号量.它是不同进程间或一个给定进程内部不同线程间同步的机制System V的信号灯是一个或者多个信号灯的一个集合(允许对 ...