前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.Net微服务实践(二):Ocelot介绍和快速开始

.Net微服务实践(二):Ocelot介绍和快速开始

作者头像
我思故我在
发布2020-04-08 15:28:23
6790
发布2020-04-08 15:28:23
举报
文章被收录于专栏:我思故我在我思故我在

目录

  • 介绍
  • 基本原理
  • 集成方式
  • 快速开始
    • 创建订单服务
    • 创建产品服务
    • 创建网关
    • 运行验证
  • 最后

上篇.Net微服务实践(一):微服务框架选型 我们对微服务框架整体做了介绍,接下来我们从网关Ocelot开始,一一开始实践

介绍

Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由、请求聚合、服务发现、认证、鉴权、限流熔断、并内置了负载均衡器与Service Fabric、Butterfly、Tracing集成。这些功能只都只需要简单的配置即可完成,下面我们会对这些功能的配置一一进行说明。

基本原理

简单的来说Ocelot是一堆的asp.net core middleware组成的一个管道。当它拿到请求之后会用一个request builder来构造一个HttpRequestMessage发到下游的真实服务器,等下游的服务返回response之后再由一个middleware将它返回的HttpResponseMessage映射到HttpResponse对象并返回给客户端。

集成方式

基本集成

用一台web service来host Ocelot,在这里有一个json配置文件,里面设置了所有对当前这个网关的配置。它会接收所有的客户端请求,并路由到对应的下游服务器进行处理,再将请求结果返回。而这个上下游请求的对应关系也被称之为路由。

集成IdentityServer

当我们涉及到认证和鉴权的时候,我们可以跟Identity Server进行结合。当网关需要请求认证信息的时候会与Identity Server服务器进行交互来完成。

网关集群

只有一个网关是很危险的,也就是我们通常所讲的单点,只要它挂了,所有的服务全挂。这显然无法达到高可用,所以我们也可以部署多台Ocelot网关。当然这个时候在多台网关前,你还需要一台负载均衡器

Consul服务发现

在Ocelot已经支持简单的负载功能,也就是当下游服务存在多个结点的时候,Ocelot能够承担起负载均衡的作用。但是它不提供健康检查,服务的注册也只能通过手动在配置文件里面添加完成。这不够灵活并且在一定程度下会有风险。这个时候我们就可以用Consul来做服务发现,它能与Ocelot完美结合。

集成Service Fabric

快速开始

创建订单服务

  • 新建一个新建asp.net core web api项目,命名为order-api, 模拟订单服务
  • 在order-api项目中,添加一个order api
代码语言:javascript
复制
[ApiController]
public class OrderController : ControllerBase
{
   // GET: api/Product
    [Route("api/orders")]
    [HttpGet]
    public  IEnumerable<string> Get()
    {
        return new string[] { "刘明的订单", "王天的订单" };
    }
}
  • 服务启动地址配置为http://localhost:5001

创建产品服务

  • 新建一个新建asp.net core web api项目,命名为product-api, 模拟产品服务
  • 在product-api项目中,添加一个product api
代码语言:javascript
复制
[ApiController]
public class ProductController : ControllerBase
{
    // GET: api/Product
    [Route("api/products")]
    [HttpGet]
    public IEnumerable<string> Get()
    {
        return new string[] { "笔记本", "口罩" };
    }

}
  • 服务启动地址配置为http://localhost:5002

创建网关

  • 新建一个新建asp.net core web api项目,命名为ocelot-gateway, 这是网关

项目结构图

  • Nuget添加Ocelot package
  • 添加Ocelot配置文件, 命名为Ocelot.json (放在appsettings.json平级目录) 。我们暂且不管配置文件内容的含义,先快速把网关运行起来
代码语言:javascript
复制
{
  "ReRoutes": [
    {
      "DownstreamPathTemplate": "/api/orders",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 5001
        }
      ],
      "UpstreamPathTemplate": "/api/orders",
      "UpstreamHttpMethod": [ "Get" ]
    },
    {
      "DownstreamPathTemplate": "/api/products",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 5002
        }
      ],
      "UpstreamPathTemplate": "/api/products",
      "UpstreamHttpMethod": [ "Get" ]
    }
  ],
  "GlobalConfiguration": {
    "BaseUrl": "http://localhost:5000"
  }
}
  • 修改Program.cs文件,添加Ocelot配置文件
代码语言:javascript
复制
Host.CreateDefaultBuilder(args)
 .ConfigureAppConfiguration((hostingContext, config) =>
 {
     config
         .SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
         .AddJsonFile("appsettings.json", true, true)
         .AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", true, true)
         .AddJsonFile("Ocelot.json",false,true)
         .AddEnvironmentVariables();
 })
  • 修改Startup.cs, 在ConfigureServices中注入Ocelot组件
代码语言:javascript
复制
services.AddOcelot()
  • 修改Startup.cs, 在Configure中添加Ocelot中间件
代码语言:javascript
复制
app.UseOcelot().Wait();

-- 服务启动地址配置为http://localhost:5000

运行验证

  • 使用dotnet run命令分别运行ocelot-gateway, order-api, product-api
  • 运行后网关地址为 http://localhost:5000 获取订单的api地址为 http://localhost:5001/api/orders 获取产品的api地址为http://localhost:5002/api/products
  • 使用Postman 调用 http://localhost:5000/api/orders, 会发现返回了订单数据

使用Postman 调用 http://localhost:5000/api/products, 会发现返回了产品数据

最后

本篇我们介绍了Ocelot,它的实现原理,以及如何快速创建ocelot的helo world项目,下面我们会介绍Ocelot的主要特性:路由

示例代码下载地址: https://github.com/lcyhjx/ocelot-demo/tree/master

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 基本原理
  • 集成方式
  • 快速开始
    • 创建订单服务
      • 创建产品服务
        • 创建网关
          • 运行验证
          • 最后
          相关产品与服务
          负载均衡
          负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档