当前位置: 移动技术网 > IT编程>开发语言>.net > Ocelot简易教程(二)之快速开始2

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

2018年09月13日  | 移动技术网IT编程  | 我要评论

3的八哥图库,妖凰陛下的高中生宝贝,白云黄鹤bbs

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

一步一步开始

  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://www.lhsxpumps.com/_localhost:1000/values 并且把goodapi以及goodapi响应路径分别设置为: , 并得到正确的响应
    2. 为了验证ocelot项目起作用,我们请求ocelotdemo项目的路径values,应该返回goodapi,或者orderapi项目中values控制器的值,而不是返回ocelotdemo中values控制器的值
    3. 为了验证ocelot负载均衡起作用,我们连续访问ocelotdemo项目的路径values,则返回的结果应该是轮流返回goodapi以及orderapi的值。

    下面我们利用 dotnet run命令分别启动三个项目,当然你也可以多项目启动。然后访问ocelotdemo项目的url并访问values控制器,完整路径“”,看到

    ocelotdemo的url:

    goodapi的url:

    orderapi的url:

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

1536765413775

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

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

1536765539347

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

最后

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

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

总结

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网