如何用Asp.Net Core的Ocelot与Consul实现复杂的服务注册与发现流程?

2026-03-30 10:131阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计772个文字,预计阅读时间需要4分钟。

如何用Asp.Net Core的Ocelot与Consul实现复杂的服务注册与发现流程?

目录 + 1. 服务注册与发现(Service Discovery) + 2. Consul + 3. .NET Core向Consul注册服务实例 + 4. 项目演示 + 4.1 API Gateway项目 + 4.2 Common项目 + 4.3 APIServiceA项目 + 4.4 APIServiceB项目 + 4.5 项目运行 + 1. 服务注册与发现(Service Discovery)

目录
  • 1.服务注册与发现(Service Discovery)
  • 2.Consul
  • 3.Asp.Net Core向Consul注册服务实例
  • 4.项目演示
    • 4.1APIGateway项目
    • 4.2Common项目
    • 4.3APIServiceA项目
    • 4.4APIServiceB项目
    • 4.5项目运行

1.服务注册与发现(Service Discovery)

  • 服务注册:我们通过在每个服务实例写入注册代码,实例在启动的时候会先去注册中心(例如Consul、ZooKeeper、etcd、Eureka)注册一下,那么客户端通过注册中心可以知道每个服务实例的地址,端口号,健康状态等等信息,也可以通过注册中心删除服务实例。这里注册中心相当于是负责维护服务实例的管控中心。
  • 服务发现:服务实例在注册中心注册之后,客户端通过注册中心可以了解这些服务实例运行状况。

2.Consul

如果要实现服务注册与发现,需要一个注册中心,这里主要介绍是Consul。

Consul官网:www.consul.io/,它主要功能有:服务注册与发现、健康检查、Key/Value、多数据中心。

如果在Windows上部署Consul,在consul.exe目录下执行consul.exe agent -dev命令行即可。

3.Asp.Net Core向Consul注册服务实例

Asp.Net Core向Consul注册服务实例调用过程如下图所示:

如何用Asp.Net Core的Ocelot与Consul实现复杂的服务注册与发现流程?

Asp.Net Core向Consul注册服务实例需要在Gateway项目中引用Consul支持的NuGet软件包,安装命令如下:

Install-Package Ocelot.Provider.Consul

然后将以下内容添加到您的ConfigureServices方法中:

services.AddOcelot().AddConsul();

在Ocelot服务发现项目示例中,通过APIGateway项目GlobalConfiguration选项可以配置服务注册与发现,文件配置具体代码如下:

{ "Routes": [ { "UseServiceDiscovery": true, "DownstreamPathTemplate": "/{url}", "DownstreamScheme": "192.168.113.128:8500" }

4.4APIServiceB项目

项目添加一个Get方法,对应APIGateway项目的路由上下游配置,具体代码如下:

[Route("api/[controller]")] [ApiController] public class ValuesController : ControllerBase { // GET api/values [HttpGet] public ActionResult<IEnumerable<string>> Get() { var port = Request.Host.Port; return new string[] { "value3", "value4", port.Value.ToString() }; } }

appsettings.json配置加入Consul地址:

"Consul": { "Host": "192.168.113.128:8500" }

4.5项目运行

在APIServiceA、APIServiceB项目的ConfigureServices添加Consul配置:

services.AddConsulConfig(Configuration);

在Configure添加Consul服务注册:

APIServiceA:app.UseConsul("172.168.18.73", "9999"); APIServiceB:app.UseConsul("172.168.18.73", "9998");

把APIGateway、APIServiceA、APIServiceB三个项目部署到IIS上:

三个项目运行起来后,通过浏览器Consul客户端可以看到MyService节点服务情况:

点击打开MyService节点可以看到注册到Consul的APIServiceA、APIServiceB服务状况:

如果把APIServiceB服务实例站点停掉:

通过Consul客户端会看到APIServiceB服务实例已经被剔除了:

如果输入CTRL+C把集群中某一个Consul服务关闭,那么集群会重新选举一个新的leader,负责处理所有服务实例的查询和事务:

到此这篇关于Asp.Net Core使用Ocelot结合Consul实现服务注册和发现的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持自由互联。

本文共计772个文字,预计阅读时间需要4分钟。

如何用Asp.Net Core的Ocelot与Consul实现复杂的服务注册与发现流程?

目录 + 1. 服务注册与发现(Service Discovery) + 2. Consul + 3. .NET Core向Consul注册服务实例 + 4. 项目演示 + 4.1 API Gateway项目 + 4.2 Common项目 + 4.3 APIServiceA项目 + 4.4 APIServiceB项目 + 4.5 项目运行 + 1. 服务注册与发现(Service Discovery)

目录
  • 1.服务注册与发现(Service Discovery)
  • 2.Consul
  • 3.Asp.Net Core向Consul注册服务实例
  • 4.项目演示
    • 4.1APIGateway项目
    • 4.2Common项目
    • 4.3APIServiceA项目
    • 4.4APIServiceB项目
    • 4.5项目运行

1.服务注册与发现(Service Discovery)

  • 服务注册:我们通过在每个服务实例写入注册代码,实例在启动的时候会先去注册中心(例如Consul、ZooKeeper、etcd、Eureka)注册一下,那么客户端通过注册中心可以知道每个服务实例的地址,端口号,健康状态等等信息,也可以通过注册中心删除服务实例。这里注册中心相当于是负责维护服务实例的管控中心。
  • 服务发现:服务实例在注册中心注册之后,客户端通过注册中心可以了解这些服务实例运行状况。

2.Consul

如果要实现服务注册与发现,需要一个注册中心,这里主要介绍是Consul。

Consul官网:www.consul.io/,它主要功能有:服务注册与发现、健康检查、Key/Value、多数据中心。

如果在Windows上部署Consul,在consul.exe目录下执行consul.exe agent -dev命令行即可。

3.Asp.Net Core向Consul注册服务实例

Asp.Net Core向Consul注册服务实例调用过程如下图所示:

如何用Asp.Net Core的Ocelot与Consul实现复杂的服务注册与发现流程?

Asp.Net Core向Consul注册服务实例需要在Gateway项目中引用Consul支持的NuGet软件包,安装命令如下:

Install-Package Ocelot.Provider.Consul

然后将以下内容添加到您的ConfigureServices方法中:

services.AddOcelot().AddConsul();

在Ocelot服务发现项目示例中,通过APIGateway项目GlobalConfiguration选项可以配置服务注册与发现,文件配置具体代码如下:

{ "Routes": [ { "UseServiceDiscovery": true, "DownstreamPathTemplate": "/{url}", "DownstreamScheme": "192.168.113.128:8500" }

4.4APIServiceB项目

项目添加一个Get方法,对应APIGateway项目的路由上下游配置,具体代码如下:

[Route("api/[controller]")] [ApiController] public class ValuesController : ControllerBase { // GET api/values [HttpGet] public ActionResult<IEnumerable<string>> Get() { var port = Request.Host.Port; return new string[] { "value3", "value4", port.Value.ToString() }; } }

appsettings.json配置加入Consul地址:

"Consul": { "Host": "192.168.113.128:8500" }

4.5项目运行

在APIServiceA、APIServiceB项目的ConfigureServices添加Consul配置:

services.AddConsulConfig(Configuration);

在Configure添加Consul服务注册:

APIServiceA:app.UseConsul("172.168.18.73", "9999"); APIServiceB:app.UseConsul("172.168.18.73", "9998");

把APIGateway、APIServiceA、APIServiceB三个项目部署到IIS上:

三个项目运行起来后,通过浏览器Consul客户端可以看到MyService节点服务情况:

点击打开MyService节点可以看到注册到Consul的APIServiceA、APIServiceB服务状况:

如果把APIServiceB服务实例站点停掉:

通过Consul客户端会看到APIServiceB服务实例已经被剔除了:

如果输入CTRL+C把集群中某一个Consul服务关闭,那么集群会重新选举一个新的leader,负责处理所有服务实例的查询和事务:

到此这篇关于Asp.Net Core使用Ocelot结合Consul实现服务注册和发现的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持自由互联。