Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由、认证、鉴权、简单缓存、限流熔断、负载均衡器等。简单的来说Ocelot是一堆的asp.net core middleware组成的一个有顺序的管道。当它拿到请求之后会用一个request builder来构造一个HttpRequestMessage发到下游的真实服务器,等下游的服务返回response之后再由一个middleware将它返回的HttpResponseMessage映射到HttpResponse上。

项目描述

> 1. 这是一个ASP.NET Core Web项目,主要展示Ocelot的使用
> 2. 实现Ocelot来控制访问
> 3. 实现Ocelot来控制负载均衡

项目架构

// OcelotStudy项目
namespace OcelotInput
{
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
} public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config
.SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
.AddJsonFile("ocelotsettings.json", true, true)
.AddEnvironmentVariables();
})
.UseStartup<Startup>();
}
} namespace OcelotInput
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddOcelot();
} public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} app.UseOcelot().Wait();
}
}
}

其他两个是asp.net core api的项目,vs直接创建就可以

Ocelot配置

{
"ReRoutes": [
{
"DownstreamPathTemplate": "/values/{action}", //下游服务配置
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 54679
},
{
"Host": "localhost",
"Port": 57417
}
],
"UpstreamPathTemplate": "/values/{action}", //上游服务配置
"UpstreamHttpMethod": [
"Get"
],
//"AddHeadersToRequest": {},
//"AddClaimsToRequest": {},
//"RouteClaimsRequirement": {}, //配置Claims鉴权
//"AddQueriesToRequest": {},
//"RequestIdKey": "",
//"FileCacheOptions": { //缓存配置
// "TtlSeconds": 0,
// "Region": ""
//},
//"ReRouteIsCaseSensitive": false,
//"ServiceName": "",
//"QoSOptions": { //服务质量与熔断
// "ExceptionsAllowedBeforeBreaking": 3,
// "DurationOfBreak": 10,
// "TimeoutValue": 5000
//},
"LoadBalancerOptions": {
"Type": "LeastConnection"
} //LoadBalancer将决定负载均衡的算法,LeastConnection – 将请求发往最空闲的那个服务器,RoundRobin – 轮流发送,NoLoadBalance – 总是发往第一个请求或者是服务发现
//"RateLimitOptions": { //为限流配置
// "ClientWhitelist": [],
// "EnableRateLimiting": false,
// "Period": "",
// "PeriodTimespan": 0,
// "Limit": 0
//},
//"AuthenticationOptions": { //配置服务认证
// "AuthenticationProviderKey": "",
// "AllowedScopes": []
//},
//"HttpHandlerOptions": {
// "AllowAutoRedirect": false,
// "UseCookieContainer": false
// //"UseTracing": true
//}
//"UseServiceDiscovery": false, // 配置服务发现
}
//{
// "DownstreamPathTemplate": "/{url}",
// "DownstreamScheme": "https",
// "DownstreamHostAndPorts": [
// {
// "Host": "localhost",
// "Port": 80
// }
// ],
// "UpstreamPathTemplate": "/{url}",
// "UpstreamHttpMethod": [ "Get" ]
//}
]
//"Aggregates": [ //服务聚合配置
// {
// "ReRouteKeys": [
// "Tom",
// "Laura"
// ],
// "UpstreamPathTemplate": "/"
// }
//]
}

运行效果

Web1项目:http://localhost:54679,    Web2项目:http://localhost:57417,     Ocelot项目:http://localhost:57083

源码地址

https://github.com/jasonhua95/samll-project/tree/master/OcelotStudy

Ocelot的学习的更多相关文章

  1. 【转载】Ocelot网关的路由热更新

    调用API修改Ocelot的配置文件 May 11, 2018 | netcoreocelot | 410 阅读 Ocelot是一个基于.net core的开源webapi服务网关开源项目,功能比较强 ...

  2. 调用API修改Ocelot的配置文件

    Ocelot是一个基于.net core的开源webapi服务网关开源项目,功能比较强大,Github项目地址为:https://github.com/ThreeMammals/Ocelot,关于Oc ...

  3. 微服务&#183;API网关

    阅文时长 | 3.52分钟 字数统计 | 1232字符 主要内容 | 1.什么是API网关 2.微服务中的API网关 3.几种部署策略 『微服务·API网关』 编写人 | SCscHero 编写时间 ...

  4. Ocelot学习笔记

    最近因工作需要,开始学习Ocelot.首先简单介绍一下,Ocelot是一个基于.net core的开源webapi 服务网关项目,目前已经支持了IdentityServer认证.根据 作者介绍,Oce ...

  5. ASP.NET Core on K8S学习之旅(13)Ocelot API网关接入

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 上一篇介绍了Ingress的基本概念和Nginx Ingress的基本配置和使 ...

  6. (10)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- Ocelot+Identity Server

    用 JWT 机制实现验证的原理如下图:  认证服务器负责颁发 Token(相当于 JWT 值)和校验 Token 的合法性. 一. 相关概念 API 资源(API Resource):微博服务器接口. ...

  7. (8)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- Ocelot网关(Api GateWay)

    说到现在现有微服务的几点不足: 1) 对于在微服务体系中.和 Consul 通讯的微服务来讲,使用服务名即可访问.但是对于手 机.web 端等外部访问者仍然需要和 N 多服务器交互,需要记忆他们的服务 ...

  8. 微服务(入门学习五):identityServer4+ocelot+consul实现简单客户端模式

    简介 主要是采用identity Server4 和ocelot 加上consul 实现简单的客户端模式 开发准备  环境准备 下载并安装Consul具体请参考前几篇的内容 项目介绍 创建ocelot ...

  9. Ocelot API网关的实现剖析

    在微软Tech Summit 2017 大会上和大家分享了一门课程<.NET Core 在腾讯财付通的企业级应用开发实践>,其中重点是基于ASP.NET Core打造可扩展的高性能企业级A ...

随机推荐

  1. mysql 5.7 enable binlog

    0. precondition a) install mysql 5.7, for  detail please refer my blog post. 1. login mysql and chec ...

  2. jenkins部署web项目(不包含前后端分离)

    本次部署的是非常非常传统的web项目, jsp页面那种, 一 首先给tomact设置管理员用户和管理员密码,这类的教程网上有很多,在<tomcat-users><tomcat-use ...

  3. Java Gui坐标绝对布局

    JFrame 要setLayout 为null setSize 设置大小 setLocation 设置位置 下面是自己准备做的一个QQ群助手,抓的是qun.qq.com的协议 这是界面设计图 运行效果 ...

  4. {"error":"Content-Type header [application/x-www-form-urlencoded] is not supported","status":406}

    ElasticSearch-head 查询报 406错误码 {"error":"Content-Type header [application/x-www-form-u ...

  5. IE8图片上传预览

    $("#smallImg").attr('style', "filter:progid:DXImageTransform.Microsoft.AlphaImageLoad ...

  6. WPF DEV gridcontrol当前项的数据导出为mdb文件

    /// <summary> /// 导出为mdb /// </summary> /// <param name="sender"></pa ...

  7. 关于ueditor插入不了动态地图

    1. 打开编辑器根目录下面的ueditor.all.js文件,找到: table.setAttribute("data-sort", cmd == "enablesort ...

  8. Z 字形变换

    将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I R E T ...

  9. Appium自动化学习1

    1.Appium-desktop配置Desired Capabilities { "platformName": "Android", "platfo ...

  10. asp.net 微信开发(一)

    在准备工作中,我们已经完成准备工作,接下来就是进行开发啦,应该怎么来开发呢??容我想想...我觉得我们可以直接让用户的消息发送到微信的消息,转到我们自己的服务器上面!!感觉好厉害的样子 1.首先写 验 ...