专栏首页dotNET知音.NET Core微服务开发网篇-ocelot

.NET Core微服务开发网篇-ocelot

通过上篇我们知道,网关是外部访问的统一入口,本文采用Ocelot作为Api网关。

环境要求:

  • vs2019
  • .NetCore3.1
  • Ocelot16.0.1

创建一个产品服务Api站点(AAStore.ProductCatalog.Api)

添加一个ProductController

  [Route("api/[controller]")]
    [ApiController]
    public class ProductController : ControllerBase
    {
        [HttpGet(template:"Get")]
        public string GetProductById()
        {
            return "Product service";
        }
    }

运行浏览

然后再创建一个订单服务Api站点(AAStore.Orde.Api)

添加一个OrderController

   [Route("api/[controller]")]
    [ApiController]
    public class OrderController : ControllerBase
    {
        [HttpGet(template:"Get")]
        public string GetOrder()
        {
            return "Order Service";
        }
    }

运行浏览

两个服务已经已经准备好了,最后创建一个网关站点(AAStore.WebApiGateway)

  • 安装Ocelot

创建一个json配置文件(ocelot.json)

{
  "Routes": [
    {
      "DownstreamPathTemplate": "/api/Product/get",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 8081
        }
      ],
      "UpstreamPathTemplate": "/api/Product/{everything}",
      "UpstreamHttpMethod": [ "Get" ]
    },
    {
      "DownstreamPathTemplate": "/api/Order/get",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 8082
        }
      ],
      "UpstreamPathTemplate": "/api/Order/get",
      "UpstreamHttpMethod": [ "Get" ]
    }
  ]
}

ocelot api网关的主要功能是接收传入的HTTP请求并将其转发到下游服务,目前作为一个HTTP请求。Ocelot将一个请求到另一个请求的路由描述为Routes。

DownstreamPathTemplate、Scheme 和 DownstreamHostAndPorts 构成要将此请求转发到的内部微服务 URL。

端口是服务使用的内部端口。使用容器时,在其 dockerfile 中指定端口。Host 是一个服务名称,取决于使用的服务名称解析。使用 docker-compose 时,服务名称由 Docker 主机提供,它使用 docker-compose 文件中提供的服务名称。如果使用 Kubernetes 或 Service Fabric 等业务流程协调程序,则应通过每个业务流程协调程序提供的 DNS 或名称解析来解析该名称。

DownstreamHostAndPorts 是一个数组,包含要将请求转发到的任何下游服务的主机和端口。通常这只包含一个条目,但有时可能想要将均衡请求加载到下游服务,而通过 Ocelot 即可添加多个条目,然后选择负载均衡器。但是如果使用 Azure 和任何业务流程协调程序,那么通过云和业务流程协调程序基础结构进行负载均衡可能会更好。

UpstreamPathTemplate 是一个 URL,Ocelot 将其用来识别用于客户端中给定请求的 DownstreamPathTemplate。最后,使用了 UpstreamHttpMethod,因此 Ocelot 可区分对相同 URL 的不同的请求(GET、POST、PUT)。

注意: ocelot16.x版本之后的配置节点写为Routes,而非ReRoutes 否则会报错(Failed to mat ch Route configuration for upstream path)。

  • 在Program.cs 通过AddJsonFile方法向生成器提供ocelot.json文件、添加Ocelot服务(AddOcelot)和添加ocelot中间件(UseOcelot)
    .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
                       {
                           config
                           .SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
                           .AddJsonFile("ocelot.json")
                           .AddEnvironmentVariables();
                           ;
                       })
                    .ConfigureServices(services =>
                    {
                        services.AddOcelot();
                        services.AddHttpContextAccessor();
                      
                    })
                    .Configure(app =>
                    {
                        app.UseOcelot().Wait();
                    });
                });

然后运行网关,通过网关访问产品、订单微服务:

如果运气好的话,跟着一步一步做,你也可以运行成功。当然ocelot还有很多功能如:路由、请求聚合、服务发现、WebSockets、认证、授权、LB、K8S、限流、熔断等等。

参考

https://docs.microsoft.com/zh-cn/dotnet/architecture/microservices/multi-container-microservice-net-applications/implement-api-gateways-with-ocelot

本文分享自微信公众号 - dotNET知音(AAshiyou),作者:李明成

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • .net core学习笔记,组件篇:服务的注册与发现(Consul)初篇

    在这里我举一个生活中非常普遍的例子——网购来简单说明,网购在我们日常生活中已经是非常普遍了,其实网购中的(商家—菜鸟驿站—买家),就组成了一个非常简单的注册发现...

    李明成
  • 当DDD遇到O2O电商:玩转统一语言和界限上下文

    李明成
  • 200行代码,7个对象——让你了解ASP.NET Core框架的本质[3.x版]

    2019年1月19日,微软技术(苏州)俱乐部成立,我受邀在成立大会上作了一个名为《ASP.NET Core框架揭秘》的分享。在此次分享中,我按照ASP.NET ...

    李明成
  • 阿里、腾讯“打包”领跑云计算,两极格局将就此固化?

    静一
  • 标准时间同步服务器的使用方法

    标准时间同步服务器接收卫星时间信号,前面板显示年月日时分秒、收星颗数、系统工作状态,电源状态等信息,将标准UTC时间信息通过网络传输,为网络设备提供精确、标准、...

    时频专家
  • 标准时间同步服务器的使用方法

    标准时间同步服务器接收卫星时间信号,前面板显示年月日时分秒、收星颗数、系统工作状态,电源状态等信息,将标准UTC时间信息通过网络传输,为网络设备提供精确、标准、...

    时频专家
  • Consul初探-集成ocelot

    由于 Consul 的高可用性、丰富的API、友好的 Web 控制台界面等特点,Consul 的发展非常迅猛,得益于 .NETCore 社区的快速发展和社区成员...

    梁规晓
  • cubemx+stm32串口学习汇总资料

    这篇文章是串口中断的文章——STM32基于CubeMX的高速串口收发程序(中断模式)比较有帮助。 http://www.stmcu.org.cn/module...

    用户4645519
  • 又一巨头入局自动驾驶领域!高通自动驾驶汽车路测获批

    经过与苹果的专利纠纷一事后,高通开始其业务多元化之路。今年,高通除了进军PC领域之外,还开始涉及自动驾驶汽车领域。 今天,加州机动车辆管理局(Departmen...

    企鹅号小编
  • Swift学习:可选型的使用

    第一部分:可选型要点 可选类型顾名思义。它表示一个变量有可能有值,也可能没有值(nil)。 可选类型类似于OC指针的nil值,但是OC中的nil只对类有用,而可...

    梧雨北辰

扫码关注云+社区

领取腾讯云代金券