.Net Core的API网关Ocelot使用 (一)
1.什么是API网关
API网关是微服务架构中的唯一入口,它提供一个单独且统一的API入口用于访问内部一个或多个API。它可以具有身份验证,监控,负载均衡,缓存,请求分片与管理,静态响应处理等。API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。通常,网关也是提供REST/HTTP的访问API。服务端通过API-GW注册和管理服务。
2.Ocelot介绍
Ocelot是用.net Core实现的一款开源的网关,Ocelot其实就是一组按照顺序排列的.net core中间件。它接受到请求之后用request builder构建一个HttpRequestMessage对象并发送到下游服务,当下游请求返回到Ocelot管道时再由一个中间件将HttpRequestMessage映射到HttpResponse上返回客户端。
3.使用Ocelot傻瓜式转发
新建三个项目webApi项目,分别命名为ApiGateway,Api_A,Api_B

  
设置Api_A端口为5001,Api_B端口为5002,ApiGateway为5000
为ApiGateway项目安装Ocelot,在Nuget中搜索Ocelot或者直接使用Install-Package Ocelot进行安装。最新版本为13.8.x支持core3.0。
在ApiGateway新建一个configuration.json配置文件。
{
  "ReRoutes": [
    {
      //上游Api请求格式
      "UpstreamPathTemplate": "/Api_A/{controller}/{action}",
      //网关转发到下游格式
      "DownstreamPathTemplate": "/api/{controller}/{action}",
      //上下游支持请求方法
      "UpstreamHttpMethod": [ "GET", "POST", "DELETE", "PUT" ],
      "DownstreamScheme": "http",
      //下游服务配置
      "DownstreamHostAndPorts": [
        {
          //下游地址
          "Host": "localhost",
          //下游端口号
          "Port": 5001
        }
      ]
    },
    {
      "UpstreamPathTemplate": "/Api_B/{controller}/{action}",
      "DownstreamPathTemplate": "/api/{controller}/{action}",
      "UpstreamHttpMethod": [ "GET", "POST", "DELETE", "PUT" ],
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 5002
        }
      ]
    }
  ]
}
在Startup.cs 的ConfigureServices和Configure中配置Ocelot
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    services.AddOcelot(new ConfigurationBuilder()
      .AddJsonFile("configuration.json")
      .Build());
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseOcelot();
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    app.UseMvc();
}
分别为Api_A,和Api_B分别添加一个print接口。
[HttpGet("print")]
public string Print()
{
    return "Api_A";
}
[HttpGet("print")]
public string Print()
{
    return "Api_B";
}
4.测试网关
启动三个项目,使用postman来调用网关
访问Api_A服务

访问Api_B服务

可以看到网关通过接受到的请求的Url后通过我们的配置自动转发到了我们想要访问的服务。
5.总结
自此就完成了Ocelot最简单的傻瓜式转发,当然它的功能远不止于此,之后我会继续更新详细介绍它的其他功能。
.Net Core的API网关Ocelot使用 (一)的更多相关文章
- .NET Core开源API网关 – Ocelot中文文档
		
Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断.并内置了负载均衡器与Service Fabric.Butterfly ...
 - .Net Core的API网关Ocelot的使用(二)[负载,限流,熔断,Header转换]
		
网关的负载均衡 当下游拥有多个节点的时候,我们可以用DownstreamHostAndPorts来配置 { "UpstreamPathTemplate": "/Api_A ...
 - 初探.Net Core API 网关Ocelot(一)
		
一.介绍 Ocelot 是基于.NetCore实现的开源的API网关,支持IdentityServer认证.Ocelot具有路由.请求聚合.服务发现.认证.鉴权.限流熔断等功能,并内置了负载均衡器与S ...
 - .NET Core 微服务—API网关(Ocelot) 教程 [二]
		
上篇文章(.NET Core 微服务—API网关(Ocelot) 教程 [一])介绍了Ocelot 的相关介绍. 接下来就一起来看如何使用,让它运行起来. 环境准备 为了验证Ocelot 网关效果,我 ...
 - .NET Core 微服务—API网关(Ocelot) 教程 [三]
		
前言: 前一篇文章<.NET Core 微服务—API网关(Ocelot) 教程 [二]>已经让Ocelot和目录api(Api.Catalog).订单api(Api.Ordering)通 ...
 - Asp.Net Core API网关Ocelot
		
首先,让我们简单了解下什么是API网关? API网关是一个服务器,是系统的唯一入口.从面向对象设计的角度看,它与外观模式类似.API网关封装了系统内部架构,为每个客户端提供一个定制的API.它可能还具 ...
 - Net Core API网关Ocelot
		
Ocelot在github的地址 https://github.com/TomPallister/Ocelot , 非常给力的是在课程当天完成了.NET Core 2.0的升级,升级过程请看https ...
 - Ocelot——初识基于.Net Core的API网关
		
前言 前不久看到一篇<.NET Core 在腾讯财付通的企业级应用开发实践>,给现在研究.Net Core及想往微服务方向发展的人来了一剂强心针.于是我也就立刻去下Ocelot的源码及去阅 ...
 - .NET Core 微服务—API网关(Ocelot) 教程 [一]
		
前言: 最近在关注微服务,在 eShop On Containers 项目中存在一个API网关项目,引起想深入了解下它的兴趣. 一.API网关是什么 API网关是微服务架构中的唯一入口,它提供一个单独 ...
 
随机推荐
- Redis持久化--Redis宕机或者出现意外删库导致数据丢失--解决方案
			
echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! Red ...
 - 精心整理(含图版)|你要的全拿走!(R数据分析,可视化,生信实战)
			
本文首发于“生信补给站”公众号,https://mp.weixin.qq.com/s/ZEjaxDifNATeV8fO4krOIQ更多关于R语言,ggplot2绘图,生信分析的内容,敬请关注小号. 为 ...
 - jq实现多选框及反选
			
1 效果图 2 html <div class="main"> <table> <tr> <th><input type=&q ...
 - Docker从入门到掉坑(二):基于Docker构建SpringBoot微服务
			
本篇为Docker从入门到掉坑第二篇:基于Docker构建SpringBoot微服务,没有看过上一篇的最好读过 Docker 从入门到掉坑 之后,阅读本篇. 在之前的文章里面介绍了如何基于docker ...
 - 【转载】常见十大经典排序算法及C语言实现【附动图图解】
			
原文链接:https://www.cnblogs.com/onepixel/p/7674659.html 注意: 原文中的算法实现都是基于JS,本文全部修改为C实现,并且统一排序接口,另外增加了一些描 ...
 - ASP.NET Core 3 使用原生 依赖注入 集成 AspectCore ,实现 AOP 功能
			
在NETCORE中可以使用AOP的方式有很多很多,包括国内优秀的开源框架asp.netcore同样可以实现AOP编程模式. IOC方面,个人喜欢net core 3自带的DI,因为他注册服务简洁优 ...
 - 并行模式之Guarded Suspension模式
			
并行模式之Guarded Suspension模式 一).Guarded Suspension: 保护暂存模式 应用场景:当多个客户进程去请求服务进程时,客户进程的请求速度比服务进程处里请求的速度快, ...
 - 20191017-7 alpha week 2/2 Scrum立会报告+燃尽图 06
			
此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9803 一.小组情况 队名:扛把子 组长:迟俊文 组员:宋晓丽 梁梦瑶 韩昊 ...
 - python3基础之 字符串切片
			
一.python3中,可迭代对象有:列表.元组.字典.字符串:常结合for循环使用:均可使用索引切片 实例: str = ' #str[start:stop:step] 遵循[左闭右开]规则 prin ...
 - python3 之 内置函数Zip
			
python3 内置函数zip 一.简介: 该函数用于将多个可迭代对象作为参数,依次将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象.二.实例1: name = ['张三','李四', ...