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

为什么这篇的标题叫“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(因为真的没什么技术含量)。创建后的项目接口如下图所示:

640?wx_fmt=png

  1. 给OcelotDemo网关项目添加Ocelot包以及配置文件
    首先给OcelotDemo添加Nuget包,可以右键“管理Nuget”包,然后搜索Ocelot添加,如下图所示:

640?wx_fmt=png
也可以通过命令 Install-Package Ocelot进行安装。方式随你喜欢。

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

640?wx_fmt=png

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

640?wx_fmt=png

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

{  "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. 为了验证上游模板/{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 得到如下结果:

640?wx_fmt=png

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

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

    OcelotDemo项目ValuesController中的Get方法改造如下:640?wx_fmt=png


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

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

640?wx_fmt=png

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

源码链接

Github地址:https://github.com/yilezhu/OcelotDemo

最后

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

本文使用的是Ocelot最新版本,为了保持技术上的跟进,因此没有使用上篇文章介绍的老版本,所以演示都是通过最新的ocelot版本来跟进的!

总结

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

相关文章:

  • AspNetCore中使用Ocelot之 IdentityServer4

  • Ocelot-基于.NET Core的开源网关实现

  • .NET Core微服务之基于Ocelot+IdentityServer实现统一验证与授权

  • Swagger如何访问Ocelot中带权限验证的API

  • Ocelot.JwtAuthorize:一个基于网关的Jwt验证包

  • .NET Core微服务之基于Ocelot实现API网关服务

  • .NET Core微服务之基于Ocelot实现API网关服务(续)

  • .NET微服务体系结构中为什么使用Ocelot实现API网关

  • Ocelot简易教程(一)之Ocelot是什么

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

原文地址: https://www.cnblogs.com/yilezhu/p/9563188.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET的前世今生与将来

笔者注谨以此文纪念我敬重的2016年9月17日去世的 装配脑袋 逝世两周年让大家久等了&#xff0c;前后花了1年的时间&#xff0c;几经改版&#xff0c;终于完成撰写了一万字长文&#xff0c;回顾和展望.NET这16年来的成功与失败。最终能成文是因为我给自己承诺必须赶在 装配脑袋 …

P4011 孤岛营救问题

P4011 孤岛营救问题 文章目录输入输出样例题意&#xff1a;题解&#xff1a;代码&#xff1a;输入输出样例 输入 4 4 9 9 1 2 1 3 2 1 2 2 2 0 2 1 2 2 0 2 1 3 1 0 2 3 3 3 0 2 4 3 4 1 3 2 3 3 0 3 3 4 3 0 4 3 4 4 0 2 2 1 2 4 2 1输出 14题意&#xff1a; (原题太长我就…

[NOI2014] 起床困难综合症(二进制,贪心)

#include<bits/stdc.h> int n,m,ans,x,a10,a2-1; //-1的补码:11111111111... char str[5]; int main(){scanf("%d%d",&n,&m);while(n--){scanf("%s%d",str,&x);if(str[0]A) a1&x, a2&x;if(str[0]X) a1^x, a2^x;if(str[0]O) a1|…

P4015 运输问题

P4015 运输问题 文章目录题目描述&#xff1a;输入格式&#xff1a;输出格式&#xff1a;输入输出样例&#xff1a;题解&#xff1a;代码&#xff1a;题目描述&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 两行分别输出最小运输费用和最大运输费用。 输入输出样例…

NetCore使用Jwtbearer给WebAPI添加访问控制

现在JWT代替session来做访问控制已经成为大部分webapi的做法&#xff0c;今天我们也来尝试一下WebAPI使用NetCore2.1创建,无身份认证信息nuget安装包IdentityModel 选择稳定版3.9.0Microsoft.AspNetCore.Authorization 版本2.1.1Microsoft.AspNetCore.Authentication.JwtBearer…

图论复习——网络流

最大流 与 最小费用最大流 Blog 有上下界网络流 Blog 最小割 Blog 模拟费用流 CF724E Goods transportation 摘自此Blog 建图优化 若同一行或者同一列的点互相可达&#xff0c;那么其实不需要两两连边&#xff0c;只需要对于每行和每列建一个辅助节点作为中转 [ARC…

离散大创项目——图片识别笔记

1.我才知道ainput()读入的竟然是字符串。。。还要强制转化成int型&#xff0c;这玩意搞了我好久 2.对照片进行裁剪&#xff0c;将照片周围多余的白色部分去除&#xff08;也就是让图像尽可能撑满整个框&#xff09; 由上一张裁成下一张 from PIL import Image import os SCA…

最小割小记

参考博客&#xff1a;最小割浅谈 关于最小割 常用描述 表述一&#xff1a;删去若干条边使得源点到汇点不连通&#xff0c;求删边的权值和的最小可能值。 表述二&#xff1a;将点集分为(S,T)(S,T)(S,T)&#xff0c;记所有从SSS中出发到TTT中的边的权值和为c(S,T)c(S,T)c(S,T)&a…

斐波那契数列求法

文章目录求斐波那切数列的几个方法&#xff1a;经典做法&#xff1a;递推&#xff1a;动态规划矩阵快速幂原理&#xff1a;代码&#xff1a;例题&#xff1a;模拟过程求斐波那切数列的几个方法&#xff1a; 经典做法&#xff1a; 众所周知&#xff1a;斐波那契数列的定义是f(…

ASP.Net Core2.1中的HttpClientFactory系列一

引言&#xff1a;ASP.NET Core2.1 中出现了一个新的 HttpClientFactory 功能, 它有助于解决开发人员在使用 HttpClient 实例从其应用程序中访问外部 web 资源时可能遇到的一些常见问题。关于HttpClientFactory 到底解决了那些HttpClient的严重问题&#xff0c;下面是我罗列出来…

最大子矩阵(普通和01)

文章目录普通矩阵&#xff08;单个矩阵值为任何数&#xff09;最大子段和扩展到二维情况01矩阵&#xff08;单个矩阵值为0或1&#xff09;代码&#xff1a;普通矩阵&#xff08;单个矩阵值为任何数&#xff09; 例题&#xff1a;POJ 1074 求出其中最大的子矩阵 答案是&#x…

自动化流程开源框架BotSharp

BotSharp是一款为方便构建智能对话机器人平台而开发的开源框架&#xff0c;最大的特点是所有模型算法都是基于.NET Core开发实现&#xff0c;甚至最基本的Penn Treebank分词标准&#xff0c;都重新用C#实现了。在机器学习python占绝对优势的时代算是不可多得的项目。该项目涉及…

积极参与开源项目,促进.NET Core生态社区发展

今天早上在微信群里聊天聊到百度的SDK 已经支持.NET Core, 百度已经在3月份就支持了&#xff0c;想起当时还是我在他们的github上提的issue&#xff1a; https://github.com/Baidu-AIP/dotnet-sdk/issues/3。.NET Core生态社区的发展已经四年多时间&#xff0c;日趋完善&#x…

Service Fabric 与Ocelot 的集成

概要云应用程序通常都需要使用前端网关&#xff0c;为用户、设备或其他应用程序提供同一个入口点。 在 Service Fabric 中&#xff0c;网关可以是任意无状态服务&#xff08;如 ASP.NET Core 应用程序&#xff09; 。本文介绍了如何将Ocelot用作 Service Fabric 应用程序的网关…

图论复习——最短路

知识点 最短路径算法 最短路径树 每个点uuu的父亲为使uuu得到最短距离的前驱节点&#xff0c;若有多个&#xff0c;则取任意一个。 题目 CF449B Jzzhu and Cities Blog CF464E The Classic Problem Blog [XSY3888] 传送门 对每个点uuu&#xff0c;记d(u)d(u)d(u)表示uuu…

T-Dongle-S3开发笔记——创建工程

创建Hello world工程 打开命令面板 方法1&#xff1a;查看->命令面板 方法2&#xff1a;按F1 选择ESP-IDF:展示示例项目 创建helloworld 选择串口 选择芯片 至此可以编译下载运行了 运行后打印的信息显示flash只有2M。但是板子上电flash是W25Q32 4MB的吗 16M-bit

hdu 1576 A/B

文章目录题目&#xff1a;题解&#xff1a;代码&#xff1a;hdu 1576题目&#xff1a; 要求(A/B)%9973&#xff0c;但由于A很大&#xff0c;我们只给出n(nA%9973)(我们给定的A必能被B整除&#xff0c;且gcd(B,9973) 1)。 Input 数据的第一行是一个T&#xff0c;表示有T组数据。…

ASP.NET Core 中断请求了解一下(翻译)

本文所讲方式仅适用于托管在Kestrel Server中的应用。如果托管在IIS和IIS Express上时&#xff0c;ASP.NET Core Module(ANCM)并不会告诉ASP.NET Core在客户端断开连接时中止请求。但可喜的是&#xff0c;ANCM预计在.NET Core 2.2中会完善这一机制。1. 引言假设有一个耗时的Act…

.net core实践系列之短信服务-架构优化

前言通过前面的几篇文章&#xff0c;讲解了一个短信服务的架构设计与实现。然而初始方案并非100%完美的&#xff0c;我们仍可以对该架构做一些优化与调整。同时我也希望通过这篇文章与大家分享一下&#xff0c;我的架构设计理念。源码地址&#xff1a;https://github.com/SkyCh…

游戏 (博弈论)

https://blog.csdn.net/Mys_C_K/article/details/91443390