Ocelot简易教程(二)之快速开始2

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介:

为什么这篇的标题叫“Ocelot简易教程(二)之快速开始2”呢,因为很多朋友跟我说上一篇“ Ocelot简易教程(二)之快速开始1”内容太少了,只是简单介绍Ocelot的一些简单配置,让Ocelot能跑起来!所以才有了这篇快速开始2.在这篇文章中,我会一步一步记录怎么跑起来一个Ocelot项目,并简单的介绍一下Ocelot怎么实现接口间的负载均衡!此篇文章的代码我会放在我的github上面。后续深入的记录Ocelot的使用的时候也会沿用这次的代码。
本文作者:依乐祝
原文地址:https://www.cnblogs.com/yilezhu/p/9638417.html

一步一步开始

  1. 演示项目概述

    这次的演示项目因为要实现Ocelot的负载均衡的功能,因此至少需要三个项目:Ocelot网关,OrderApi,GoodApi .名字随便取的,可能博主认为这样起名字比较顺口,没有其他特别的含义。
    
  2. 新建上面的三个asp.net core web api项目

    相信看这篇文章的朋友至少应该懂asp.net core了吧,不然你也接触不到Ocelot的。所以,这里假设大家都会创建asp.net core web api(因为真的没什么技术含量)。创建后的项目接口如下图所示:
    

1536760414707

  1. 给OcelotDemo网关项目添加Ocelot包以及配置文件

    首先给OcelotDemo添加Nuget包,可以右键“管理Nuget”包,然后搜索Ocelot添加,如下图所示:
    

1536760891676
也可以通过命令 Install-Package Ocelot进行安装。方式随你喜欢。

然后给OcelotDemo项目新建一个json文件,新建的方式就是,右键OcelotDemo项目,然后选择“添加”-》“新建项”,在弹出的窗口里面找到json文件,并写好文件的名字即可,(当然,也可以用快捷键 Ctrl+Shilt+A)如下图所示:

1536761555713

当然,你还需要右键你刚刚设置的ocelot.json文件,并设置“复制到输出目录”的属性为“始终复制”如下所示:

1536762570080

接下来,可以按照我写的非常简单的配置进行配置。

{
  "ReRoutes": [
    {
      "DownstreamPathTemplate": "/api/{everything}",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 1001
        },
        {
          "Host": "localhost",
          "Port": 1002
        }
      ],
      "UpstreamPathTemplate": "/{everything}",
      "UpstreamHttpMethod": [ "Get", "Post" ],
      "LoadBalancerOptions": {
        "Type": "RoundRobin"
      }
    }
  ],
  "GlobalConfiguration": {

  }
}

上面配置,有两个节点,分别是ReRoutes数组,以及GlobalConfiguration。这里简单做一下阐述:

ReRoutes:告诉Ocelot如何处理上游的请求。

DownstreamPathTemplate:下游的路由模板,即真实处理请求的路径模板

DownstreamScheme:请求的方式,如:http,htttps

DownstreamHostAndPorts:下游的IP以及端口,可以有多个(如果使用负载均衡),方便实现负载均衡,当然你也可以使用服务发现,实现下游服务的自动注册与发现,这篇文章不会讲解。

UpstreamPathTemplate:上游请求的模板,即用户真实请求的链接

UpstreamHttpMethod:上游请求的http方法,是个数组,你可以写多个。

LoadBalancerOptions:负载均衡选项(DownstreamHostAndPorts有多个的时候才能看到效果),有三种方式

LeastConnection : 将请求发往最空闲的那个服务器

RoundRobin :轮流发送

NoLoadBalance :不启用负载均衡,总是发往第一个请求或者服务发现的那个服务器

GlobalConfiguration:顾名思义就是全局配置,此节点的配置允许覆盖ReRoutes里面的配置,你可以在这里进行通用的一些配置信息。

  1. OcelotDemo中添加Ocelot支持。

首先在OcelotDemo项目的Program.cs中加载上一步我们添加的Ocelot的配置文件,如下所示:

 public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.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")
                        .AddEnvironmentVariables();
                })
                .UseUrls("http://localhost:1000")
                .UseStartup<Startup>();

然后,在Startup.cs中,添加Ocelot服务并启用Ocelot中间件,这里你需要在Startup.cs文件中引入下面两个命名空间:

using Ocelot.DependencyInjection;
using Ocelot.Middleware;

然后,分别在ConfigureServices中注册Ocelot服务以及Configure中启用Ocelot中间件:

 public void ConfigureServices(IServiceCollection services)
        {
            services.AddOcelot();//注入Ocelot服务
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseOcelot().Wait();//使用Ocelot中间件
            app.UseMvc();
        }

这时候,Ocelot的配置基本完成了,下面我们验证下Ocelot有没有正常工作,以及我们配置的负载均衡,有没有起作用吧。

  1. 测试Ocelot项目以及负载均衡有没有起作用

    这里,首先分别对三个项目的ValuesController控制器做如下改造:

    OcelotDemo项目ValuesController中的Get方法改造如下:

     [HttpGet]
            public ActionResult<IEnumerable<string>> Get()
            {
                return new string[] { "value1 from Ocelot", "value2 from Ocelot" };
            }

    OrderApi项目中的ValuesController中的Get方法改造如下:

     [HttpGet]
            public ActionResult<IEnumerable<string>> Get()
            {
                return new string[] { "value1 from Order Api", "value2 from Order Api" };
            }

    GoodApi项目中的ValuesController中的Get方法改造如下:

      [HttpGet]
            public ActionResult<IEnumerable<string>> Get()
            {
                return new string[] { "value1 from Good Api", "value2 from Good Api" };
            }

结合我们上面的配置,可以知道改造的目的就是为了如下的测试,我们做出如下假设:

  1. 为了验证上游模板/{everything} 对应下游模板/api/{everything} 我们请求的路径即为http://localhost:1000/Values 并且把GoodApi以及GoodApi响应路径分别设置为:http://localhost:1001/api/Values ,http://localhost:1003/api/Values 并得到正确的响应
  2. 为了验证Ocelot项目起作用,我们请求ocelotDemo项目的路径values,应该返回GoodApi,或者OrderApi项目中values控制器的值,而不是返回ocelotDemo中values控制器的值
  3. 为了验证Ocelot负载均衡起作用,我们连续访问ocelotDemo项目的路径values,则返回的结果应该是轮流返回GoodApi以及OrderApi的值。

下面我们利用 dotnet run命令分别启动三个项目,当然你也可以多项目启动。然后访问OcelotDemo项目的Url并访问Values控制器,完整路径“http://localhost:1000/Values”,看到

OcelotDemo的Url:http://localhost:1000

GoodApi的Url:http://localhost:1001

OrderApi的Url:http://localhost:1002

我们第一次访问http://localhost:1000/Values 得到如下结果:

1536765413775

说明我们的假设1以及假设2都是没问题的。也就是说我们的Ocelot已经在起作用了,而且根据上下游路由进行了映射。

接下来我们刷新下页面,得到如下结果:

1536765539347

说明我们的假设3即Ocelot的负载均衡也起作用了。当然,你可以多刷新几次,可以看到返回的结果在GoodApi与Order Api之间来回切换。因为我们的负载均衡策略就是轮询啊!

最后

这篇文章主要是为了让记录如何快速的开始使用Ocelot。关于Ocelot的配置很多都没有描述,包括限流以及熔断策略,以及多配置文件自动加载功能,等等。这个超出了快速开始的范围,当然这些高级的用法会在下面的系列文章中会一一记录。

总结

本篇文章只是记录了,如何快速的成功的使用ocelot,并进行了简单的配置,配置中又引入了一个负载均衡的策略,最后通过代码进行了相关的实现以及测试!关于其他的一些配置,我会在下面的文章中进行阐述。这里只是对上篇文章“Ocelot简易教程(二)之快速开始1”的补充!感谢大家的阅读!

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
编译器 C++
C++模板之——类模板详解及代码示例
C++模板之——类模板详解及代码示例
C++模板之——类模板详解及代码示例
|
前端开发 JavaScript 算法
JavaScript实现伪随机正态分布
JavaScript实现伪随机正态分布
154 0
|
存储 分布式计算 Hadoop
【大数据技术Hadoop+Spark】HDFS概念、架构、原理、优缺点讲解(超详细必看)
【大数据技术Hadoop+Spark】HDFS概念、架构、原理、优缺点讲解(超详细必看)
682 0
|
开发工具 git
git push报错:The current branch master has no upstream branch
git push报错:The current branch master has no upstream branch
39587 0
git push报错:The current branch master has no upstream branch
|
10月前
|
数据采集 安全 数据管理
深度解析:DataHub的数据集成与管理策略
【10月更文挑战第23天】DataHub 是阿里云推出的一款数据集成与管理平台,旨在帮助企业高效地处理和管理多源异构数据。作为一名已经有一定 DataHub 使用经验的技术人员,我深知其在数据集成与管理方面的强大功能。本文将从个人的角度出发,深入探讨 DataHub 的核心技术、工作原理,以及如何实现多源异构数据的高效集成、数据清洗与转换、数据权限管理和安全控制措施。通过具体的案例分析,展示 DataHub 在解决复杂数据管理问题上的优势。
1134 1
|
10月前
|
JavaScript 开发者
在 Vue 3 中使用 Proxy 实现数据的双向绑定
【10月更文挑战第23天】Vue 3利用 `Proxy` 实现了数据的双向绑定,无论是使用内置的指令如 `v-model`,还是通过自定义事件或自定义指令,都能够方便地实现数据与视图之间的双向交互,满足不同场景下的开发需求。
332 1
|
Rust 安全 数据挖掘
【颠覆常规】Rust科学计算革命:掌握数值分析与数据处理的全新利器,让你的工作事半功倍!
【8月更文挑战第31天】Rust语言凭借其出色的内存安全和高性能特性,在科学计算领域逐渐崭露头角。本文通过具体代码示例展示了Rust在数值计算与数据分析中的应用,包括矩阵乘法、统计分析及线性方程组求解。通过安装Rust并引入`ndarray`、`nalgebra`和`statrs`等库,读者可以轻松实现各类科学计算任务。Rust在科学计算领域的潜力巨大,未来可期。
635 1
|
存储 SQL NoSQL
数据库技术全攻略:原理、应用与未来展望
一、引言 在数字化时代,数据是企业决策的关键
|
12月前
|
存储 机器学习/深度学习 缓存
MemLong: 基于记忆增强检索的长文本LLM生成方法
本文介绍了一种名为MemLong的创新长文本处理方法,该方法通过整合外部检索器显著增强了大型语言模型处理长上下文的能力。MemLong采用轻量级设计,利用不可训练的外部记忆库存储历史上下文和知识,并通过检索相关的块级键值对增强模型输入。其技术优势包括分布一致性、高效训练策略及扩展的上下文窗口,能够在单个GPU上处理长达80k个token的文本,同时保持计算效率和内存控制。实验结果显示,MemLong在多个长文本基准数据集上表现出色,显著提升了语言建模能力和上下文学习效果。
977 1
|
Ubuntu Linux 虚拟化
安装Windows Linux 子系统的方法:适用于windows 11 版本
本文提供了在Windows 11系统上安装Linux子系统(WSL)的详细步骤,包括启用子系统和虚拟化功能、从Microsoft Store安装Linux发行版、设置WSL默认版本、安装WSL2补丁,以及完成Ubuntu的首次安装设置。
3979 2