一、介绍

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. 杂项:SVN -u

    ylbtech-杂项:SVN 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   7.返回顶部   8.返回顶部   9.返回顶部   10 ...

  2. 3.1 开始使用 redux

    前面我们介绍了 flux 架构以及其开源实现 redux,在这一节中,我们将完整的介绍 redux: redux 介绍 redux 是什么 redux 概念 redux 三原则 redux Store ...

  3. XML XPATH simpleXML

    XPath 通过DOM结构定位节点,在数据量很大的情况下速度下降的很厉害.解决方法是XPath.Xpath的作用:用于快速定位节点 position()是节点的位置,节点的位置是从1开始 simple ...

  4. mongodb 数据修改

    update:语法格式如下: db.collection.update( <query>, <update>, { upsert: <boolean>, multi ...

  5. MySQL数据库(五)—— 用户管理、pymysql模块

    用户权限管理.pymysql模块 一.用户管理(权限管理) 在MySQL中自带的mysql数据库中有4个表用于用户管理的 # 优先级从高到低 user > db > tables_priv ...

  6. 注册页面-使用form模块搭建

    基于Django的form模块,快速的搭建注册页面,每个限制条件,都放在form模块里面,不单独对每一项编写标签,使用模版的 for 循环来渲染. 首先设置form模块 在blogs模块下创建一个bl ...

  7. hdu6354 /// 线段树

    题目大意: 给定n m x y z 长度为n的序列初始为0 接下来m个操作 l r v 将l r区间内比v小的数都变成v l r v由x y z和给定的函数生成 线段树维护区间 最大值 最小值 再加 ...

  8. 【踩坑】IDEA 设置 JVM 参数

    1.可视化界面设置 Run->Edit Configuration... 然后设置 2.配置文件设置 打开 IDEA 安装目录,看到有一个 bin 目录,其中有两个 vmoptions 文件,需 ...

  9. H5新增input表单、表单属性

    新增表单 email,Email类型 url , Url类型 date,日期类型 time,时间类型 month,月类型 week,周类型 number,数字类型 tel,电话类型 search,搜索 ...

  10. @value传值到static字段

    解决办法: 1.将这两个私有属性的set方法从私有变成公开(private -->>> public); 2.生成这两个静态属性的set方法: 3.将原来在静态属性上的@Value( ...