天天看点

Asp.Net Core API网关Ocelot

Asp.Net Core API网关Ocelot

首先,让我们简单了解下什么是API网关?

      API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。

    API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。通常,网关也是提供REST/HTTP的访问API。服务端通过API-GW注册和管理服务。

其次,我们了解下Ocelot框架

 Ocelot的目标是使用.NET运行微服务/面向服务架构,我们需要一个统一的入口进入我们的服务,提供监控、鉴权、负载均衡等机制,也可以通过编写中间件的形式,来扩展Ocelot的功能。  Ocelot是一堆特定顺序的中间件。

接下来,我们就针对Ocelot的具体用法展开介绍。

这里使用的Ocelot版本为2.0,.Net Core版本2.0

1、搭建Asp.net Core WebApi项目,引用Ocelot.dll。

Asp.Net Core API网关Ocelot

Nuget控制台,执行Ocelot安装。

  

  2、修改Startup程序。

3、配置Ocelot。

我们新建一个名为configuration的json文件,配置如下:

在这里,我们配置了两个服务,端口分别为8801和8802的。

Ocelot支持负载均衡(提供轮询、最少访问)。Ocelot大部分功能,都可以通过中间件来完成,也可以实现和重写中间件。

Ocelot原理非常简单,这里的配置文件,体现了上游请求和下游服务间的映射关系,你可以理解为,上游是客户端直接调用的URL ,下游,则是对应我们开发的服务。

4、新增两个WebApi项目,分别为APIUserServiec和APIProductService。

API服务

端口(Port)

APIUserServiec

8801

APIProductService

8802

解决方案如下:

Asp.Net Core API网关Ocelot

5、配置VS启动端口:

Asp.Net Core API网关Ocelot

依次类推,分别设置端口。

6、启动项目。

配置多个项目启动。

Asp.Net Core API网关Ocelot

F5启动项目。

Asp.Net Core API网关Ocelot

再通过API网关,访问商品服务:http://localhost:5000/api/product。

Asp.Net Core API网关Ocelot

常见问题:

首次在启动API网关时,触发以下错误。

Sequence contains no matching element

Asp.Net Core API网关Ocelot

根据错误详细信息,可知原因是由于系统调用AddIdentityServer方法时,触发异常。

Asp.Net Core API网关Ocelot

刚开始,怀疑是配置文件configuration.json文件配置导致的,Ocelot2.0版,采用官方配置仍然触发该异常,由此排除这种可能。接下来,直接从github上克隆源代码,查看。

Asp.Net Core API网关Ocelot

找到触发错误的地方,

这就代码触发了错误,是由于表达式条件不成立,导致First发生异常,这就简单了,我们修改Main函数,

把这句代码:

改成:

这样,就解决了问题,API网关启动成功。另外,官方例子https://github.com/TomPallister/Ocelot/blob/develop/test/Ocelot.ManualTest/Program.cs中,写法是正确的,大家自己写的时候,注意把IWebHostBuilder换成var会引发错误。

这样,使用Ocelot框架搭建API网关的工作已经完成,尝试通过访问API网关,来访问下游的服务。

欢迎大家一起研究探讨,开启你的微服务之路。

继续阅读