返回顶部
首页 > 资讯 > 精选 >Asp.Net Core怎么使用Ocelot实现服务注册和发现
  • 497
分享到

Asp.Net Core怎么使用Ocelot实现服务注册和发现

2023-06-29 22:06:17 497人浏览 薄情痞子
摘要

本文小编为大家详细介绍“asp.net Core怎么使用Ocelot实现服务注册和发现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Asp.net Core怎么使用Ocelot实现服务注册和发现”文章能帮助大家解决疑惑

本文小编为大家详细介绍“asp.net Core怎么使用Ocelot实现服务注册和发现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Asp.net Core怎么使用Ocelot实现服务注册和发现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

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

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

  • 服务发现:服务实例在注册中心注册之后,客户端通过注册中心可以了解这些服务实例运行状况。

2.Consul

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

Consul官网:https://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实现服务注册和发现

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": "Http",      "ServiceName": "MyService",      "LoadBalancerOptions": {        "Type": "RoundRobin"      },      "UpstreamPathTemplate": "/{url}",      "UpstreamHttpMethod": [ "Get" ],      "ReRoutesCaseSensitive": false    }  ],  "GlobalConfiguration": {    //服务发现配置    "ServiceDiscoveryProvider": {      //注册中心Consul地址      "Host": "192.168.113.128",      //注册中心Consul端口号      "Port": 8500,      "Type": "Consul",      //以毫秒为单位,告诉Ocelot多久调用一次Consul来更改服务配置。      "PollingInterval": 100,      //如果你有在Consul上配置key/value,则在这里输入配置key。      "ConfigurationKey": "MyService_AB"    }  }}

ServiceDiscoveryProvider选项说明:

  • Host:注册中心Consul地址。

  • Port:注册中心Consul端口号。

  • Type:注册中心类型。

  • PollingInterval:以毫秒为单位,告诉Ocelot多久调用一次Consul来更改服务配置。

  • ConfigurationKey:如果你有在Consul上配置key/value,则在这里输入配置key。

4.项目演示

4.1APIGateway项目

ConfigureServices添加Ocelot、Consul注入:

services.AddOcelot().AddConsul();

Configure添加使用Ocelot:

app.UseOcelot().Wait();

服务发现配置如Ocelot服务发现项目示例一样。

4.2Common项目

先安装Consul的NuGet软件包,安装命令如下:

Install-Package Consul

在该项目添加一个AppExtensions扩展类,用来对服务APIServiceA、APIServiceB项目在Consul注册实例,为了展示效果,具体代码稍作修改如下:

public static class AppExtensions{    public static IServiceCollection AddConsulConfig(this IServiceCollection services, IConfiguration configuration)    {        services.AddSingleton<IConsulClient, ConsulClient>(p => new ConsulClient(consulConfig =>        {            var address = configuration.GetValue<string>("Consul:Host");            consulConfig.Address = new Uri(address);        }));        return services;    }    public static IApplicationBuilder UseConsul(this IApplicationBuilder app, string host = null, string port = null)    {        //获取consul客户端实例        var consulClient = app.ApplicationServices.GetRequiredService<IConsulClient>();        var logger = app.ApplicationServices.GetRequiredService<ILoggerFactory>().CreateLogger("AppExtensions");        var lifetime = app.ApplicationServices.GetRequiredService<IApplicationLifetime>();        if (!(app.Properties["server.Features"] is FeatureCollection features)) return app;        //var addresses = features.Get<IServerAddressesFeature>();        //var address = addresses.Addresses.FirstOrDefault();        //if (address == null)        //{        //    return app;        //}        var address = host + ":" + port;        if (string.IsNullOrWhiteSpace(host) || string.IsNullOrWhiteSpace(port))        {            Console.WriteLine($"host或者port为空!");            return app;        }        Console.WriteLine($"address={address}");        var uri = new Uri(address);        Console.WriteLine($"host={uri.Host},port={uri.Port}");        var reGIStration = new AgentServiceRegistration()        {            ID = $"MyService-{uri.Port}",            Name = "MyService",            Address = $"{uri.Host}",            Port = uri.Port,            Check = new AgentServiceCheck()            {                DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服务启动多久后注册                Interval = TimeSpan.FromSeconds(10),//健康检查时间间隔                HTTP = $"{address}/HealthCheck",//健康检查地址                Timeout = TimeSpan.FromSeconds(5)//超时时间            }        };        logger.LogInfORMation("Registering with Consul");        logger.LogInformation($"Consul RegistrationID:{registration.ID}");        //注销        consulClient.Agent.ServiceDeregister(registration.ID).ConfigureAwait(true);        //注册        consulClient.Agent.ServiceRegister(registration).ConfigureAwait(true);        //应用程序关闭时候        lifetime.ApplicationStopping.Register(() =>        {            //正在注销            logger.LogInformation("Unregistering from Consul");            consulClient.Agent.ServiceDeregister(registration.ID).ConfigureAwait(true);        });        //每个服务都需要提供一个用于健康检查的接口,该接口不具备业务功能。服务注册时把这个接口的地址也告诉注册中心,注册中心会定时调用这个接口来检测服务是否正常,如果不正常,则将它移除,这样就保证了服务的可用性。        app.Map("/HealthCheck", s =>        {            s.Run(async context =>            {                await context.Response.WriteAsync("ok");            });        });        return app;    }}

4.3APIServiceA项目

项目添加一个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[] { "value1", "value2", port.Value.ToString() };    }}

appsettings.JSON配置加入Consul地址:

"Consul": {  "Host": "http://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": "http://192.168.113.128:8500"}

4.5项目运行

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

services.AddConsulConfig(Configuration);

在Configure添加Consul服务注册:

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

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

Asp.Net Core怎么使用Ocelot实现服务注册和发现

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

Asp.Net Core怎么使用Ocelot实现服务注册和发现

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

Asp.Net Core怎么使用Ocelot实现服务注册和发现

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

Asp.Net Core怎么使用Ocelot实现服务注册和发现

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

Asp.Net Core怎么使用Ocelot实现服务注册和发现

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

Asp.Net Core怎么使用Ocelot实现服务注册和发现

Asp.Net Core怎么使用Ocelot实现服务注册和发现

读到这里,这篇“Asp.Net Core怎么使用Ocelot实现服务注册和发现”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: Asp.Net Core怎么使用Ocelot实现服务注册和发现

本文链接: https://lsjlt.com/news/326643.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Asp.Net Core怎么使用Ocelot实现服务注册和发现
    本文小编为大家详细介绍“Asp.Net Core怎么使用Ocelot实现服务注册和发现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Asp.Net Core怎么使用Ocelot实现服务注册和发现”文章能帮助大家解决疑惑...
    99+
    2023-06-29
  • Asp.Net Core使用Ocelot结合Consul实现服务注册和发现
    目录1.服务注册与发现(Service Discovery)2.Consul3.Asp.Net Core向Consul注册服务实例4.项目演示4.1APIGateway项目4.2Co...
    99+
    2024-04-02
  • asp.net Core中如何实现同名服务注册
    这篇文章主要为大家展示了“asp.net Core中如何实现同名服务注册”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“asp.net Core中如何实现同名服务注册”这篇文章...
    99+
    2023-06-29
  • .NET Core使用Eureka实现服务注册
    首先先安装nuget组件: Steeltoe.Discovery.ClientCore 然后在ConfigureServices中进行注入 services.AddDiscovery...
    99+
    2024-04-02
  • asp.net Core中同名服务注册的实现代码
    目录1、使用.net Core自带容器2、AutoFac中的实现通常情况下,在使用注入时一个服务接口对应一个实现类,注入方式采用构造函数注入即可,但如果存在多个类实现同一个接口的情况...
    99+
    2024-04-02
  • ASP.net core怎么使用Autofac实现泛型依赖注入
    本文小编为大家详细介绍“ASP.net core怎么使用Autofac实现泛型依赖注入”,内容详细,步骤清晰,细节处理妥当,希望这篇“ASP.net core怎么使用Autofac实现泛型依赖注入”文章能帮助大家解决疑惑...
    99+
    2023-06-30
  • ASP.NET Core依赖关系注入怎么实现
    本篇内容主要讲解“ASP.NET Core依赖关系注入怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ASP.NET Core依赖关系注入怎么实现”吧!1.前言面向对象...
    99+
    2023-06-29
  • ASP.net core使用Autofac实现泛型依赖注入
    目录什么是泛型依赖注入.net core里实现泛型依赖注入安装AutofacIMyRepository定义仓储接口MyRepositoryBase仓储实现在Program声明实现依赖...
    99+
    2024-04-02
  • 使用SpringBoot如何实现注册与发现服务
    这篇文章将为大家详细讲解有关使用SpringBoot如何实现注册与发现服务,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。微服务实践“微服务”自然要学习如何做服务注册与发现基于SpringBo...
    99+
    2023-05-31
    springboot 服务
  • ASP.NET Core如何注入多个服务实现类
    目录1、定义个接口2、注入服务 3、功能类 4、高级类前言: 依赖注入在 ASP.NET Core 中起中很重要的作用,也是一种高大上的编程思想,它的总体原则就是...
    99+
    2024-04-02
  • ASP.NET Core依赖注入DI容器怎么实现
    这篇文章主要介绍“ASP.NET Core依赖注入DI容器怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ASP.NET Core依赖注入DI容器怎么实现”文章能帮助大家解...
    99+
    2023-07-05
  • SpringCloud实现Eureka服务注册与发现
    目录一、Eureka概述 1、Eureka特点 2、Eureka两大组件 3、Eureka三大角色 二、Eureka Server服务注册中心 1、pom.xml2、applicat...
    99+
    2024-04-02
  • ASP.NET Core中使用MialKit实现邮件发送功能
    具体代码如下所示: # 导包   首先我们需要导入 MailKit NuGet包,NuGet安装包命令在下方拓展介绍中。 # 引用命名空间 using MailKit.Net...
    99+
    2022-06-07
    net ASP.NET core 邮件 ASP
  • SpringBoot怎么实现服务注册
    Spring Boot通常使用Spring Cloud来实现服务注册。 要在Spring Boot中实现服务注册,可以按照以下步骤进...
    99+
    2024-03-07
    SpringBoot
  • 使用ASP.NET Core怎么实现文件响应压缩
    使用ASP.NET Core怎么实现文件响应压缩?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。误区1:未使用 Brotil 压缩  几乎不需要任何额外的代价,Br...
    99+
    2023-06-15
  • ASP.NET Core 配置和使用环境变量的实现
    前言 通常在应用程序开发到正式上线,在这个过程中我们会分为多个阶段,通常会有 开发、测试、以及正式环境等。每个环境的参数配置我们会使用不同的参数,因此呢,在ASP.NET C...
    99+
    2022-06-07
    ASP.NET 环境 环境变量 net core ASP 变量
  • 微服务架构中如何实现服务的发现和注册?
    随着云计算和大数据时代的到来,传统的单体应用已经逐渐不能满足业务的发展需求。为了更好地应对复杂业务场景下的挑战,微服务架构越来越受到开发者的青睐。在微服务架构中,众多的服务逐渐增加,这就要求系统需要具备服务的发现和注册能力,本文将重点介绍微...
    99+
    2023-05-17
    微服务架构 服务发现 服务注册
  • SpringCloud服务注册和发现组件Eureka
    目录一、Eureka简介:1.1 什么是eureka1.2 eureka的功能1.3 eureka服务注册与服务发现二、springcloud-eureka-server配置三、sp...
    99+
    2024-04-02
  • 怎么用Spring Cloud的Eureka实现服务注册
    今天小编给大家分享一下怎么用Spring Cloud的Eureka实现服务注册的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有...
    99+
    2024-04-02
  • 使用Ajax和forms组件怎么实现注册功能
    这期内容当中小编将会给大家带来有关使用Ajax和forms组件怎么实现注册功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前端HTML<!DOCTYPE html>{% ...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作