分布式结构,应用服务就不能是单个应用,必须得提供多个,相当于是这个服务的集群(单独一个服务坏了,不影响其他服务继续提供服务)。

那么基于这个应用服务的集群管理,就是服务注册与发现服务。

它主要是用来管理你的应用服务集群的。

实际情况中,你的服务会部署在Docker容器中,然后,它在容器里向外暴漏自己的位置,告诉 服务注册与发现,我在这里,我要报名,我要为客户提供服务。

然后,服务中心会管理这些注册上来的服务,并会定时检查它们是否存在,如果不存在,就给它们下线,不让他们继续服务了。

如上图,实现服务注册与发现,可以通过 Consul、Zookeeper、Etcd 技术实现,Zookeeper 是 kafka 集群的时候用到的技术组件。

我这里主要介绍  Consul 这个组件 (谷歌出品,Go语言开发),内置服务注册与发现、配置服务中心,健康检查、一致性协议(选举协议),服务部署简单。

可以根据我这篇文章来对服务进行部署(集群高可用)等方式。

Consul组件 安装与部署 (window),集群部署,并验证其高可用

https://blog.csdn.net/i2blue/article/details/114797809

部署完整以后,就需要在具体的服务中使用。

这个时候,就需要开发一个服务进行连接

就新建一个.Net5.0的项目,然后 结构如下,主要修改了以下三个地方。

Program  (增加了识别命令行信息)

    public class Program{public static void Main(string[] args){new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddCommandLine(args)//支持命令行参数.Build();CreateHostBuilder(args).Build().Run();}public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();});}

Startup (增加了命令参数信息获取和Consul 服务注册,以及服务停止时撤销注册的服务信息)

    public class Startup{public Startup(IConfiguration configuration){Configuration = configuration;}public IConfiguration Configuration { get; }// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){services.AddControllersWithViews();}// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IHostApplicationLifetime lifetime, IWebHostEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}else{app.UseExceptionHandler("/Home/Error");}app.UseStaticFiles();app.UseRouting();app.UseAuthorization();app.UseEndpoints(endpoints =>{endpoints.MapControllerRoute(name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");});ConsulRegist(Configuration, lifetime);}public void ConsulRegist(IConfiguration configuration, IHostApplicationLifetime lifetime){ConsulClient client = new ConsulClient(c =>{c.Address = new Uri("http://192.168.2.7:8500/");c.Datacenter = "dc1";});string ip = configuration["ip"];int port = int.Parse(configuration["port"]);string serverName = configuration["name"];var registration = new AgentServiceRegistration(){ID = serverName + Guid.NewGuid(),Name = serverName,Address = ip,Port = port,Tags = new string[] { },Check = new AgentServiceCheck(){Interval = TimeSpan.FromSeconds(12),HTTP = $"http://{ip}:{port}/Home/Health",Timeout = TimeSpan.FromSeconds(5),DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(20)}};client.Agent.ServiceRegister(registration);// 应用程序终止时,服务取消注册lifetime.ApplicationStopping.Register(() =>{client.Agent.ServiceDeregister(registration.ID).Wait();});}}

HomeController (主要增加了 健康检查 Health和Consul服务的获取)

    public class HomeController : Controller{private readonly ILogger<HomeController> _logger;public HomeController(ILogger<HomeController> logger){_logger = logger;}public IActionResult Index(){ConsulClient client = new ConsulClient(c =>{c.Address = new Uri("http://192.168.2.7:8500/");c.Datacenter = "dc1";});return Json(client.Agent.Services().Result.Response);}public IActionResult Health(){return Ok();}[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]public IActionResult Error(){return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });}}

以及项目启动的命令信息如下:

dotnet Server.dll --urls http://192.168.1.6:1000 --ip 192.168.1.6 --port 1000 --name server1dotnet Server.dll --urls http://192.168.1.6:1001 --ip 192.168.1.6 --port 1001 --name server2

最后,结果如下

已经注册到Consul上两个服务了。

访问地址,也能返回相应的服务信息。

至此,服务的注册与发现已经完成。可以根据业务需要来搭建框架。

Demo下载地址: https://download.csdn.net/download/kesshei/15805492

.Net5.0 微服务之服务注册与发现(Consul)相关推荐

  1. 《深入理解 Spring Cloud 与微服务构建》第十二章 服务注册和发现 Consul

    <深入理解 Spring Cloud 与微服务构建>第十二章 服务注册和发现 Consul 文章目录 <深入理解 Spring Cloud 与微服务构建>第十二章 服务注册和发 ...

  2. SpringCloud核心教程 | 第四篇:服务注册与发现 Consul篇

    Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全 ...

  3. 四、服务注册与发现Consul

    文章目录 一.Consul 的介绍 二.Consul 的使用 2.1 Consul Server安装 2.2 微服务注册 Consul 三.注册中心的对比 一.Consul 的介绍 Consul是一套 ...

  4. springcloud微服务系列之服务注册与发现组件Eureka

    一.Eurake的简介 二.使用Eureka进行服务的注册消费 1.创建一个服务注册中心 2.创建服务的提供者 3.创建服务的消费者 总结 一.Eurake的简介 今天我们来介绍下springclou ...

  5. 微服务之「Cosul 服务注册与发现 」

    服务注册与发现 Consul是微服务的一个框架,是服务注册与发现的一个解决方案.在说Consul之前先来看看什么是服务注册与发现. 微服务体系中,服务注册与服务发现是两个最核心的模块.服务A调用服务B ...

  6. 微服务系列:服务发现与注册-----Eureka(面试突击!你想了解的Eureka都在这里.持续更新中......)

    1.什么是落地SOA(面向服务架构)? SOA面向服务架构,是一种架构思想,是跨语言和平台的.SOA宗旨简单明了,根据项目服务完成架构搭建,以服务为基准点完成组件化和模块化.提供服务是项目的基本内容, ...

  7. 【微服务】服务之间的调用方式

    文章目录 常见的远程调用方式有两种 RPC和HTTP对比 RPC有几个特点 HTTP其实就是一种网络传输协议 微服务之间相互调用的三种最常见方式 RestTemplate方式 引入Nacos注册中心 ...

  8. 源码分析Dubbo服务注册与发现机制RegistryDirectory)

    RegistryDirectory,基于注册中心的服务发现,本文将重点探讨Dubbo是如何实现服务的自动注册与发现.从上篇文章,得知在消息消费者在创建服务调用器(Invoker)[消费者在初始时]时需 ...

  9. etcd 笔记(09)— 基于 etcd 实现微服务的注册与发现

    1. 服务注册与发现基本概念 在单体应用向微服务架构演进的过程中,原本的巨石型应用会按照业务需求被拆分成多个微服务,每个服务提供特定的功能,也可能依赖于其他的微服务.此时,每个微服务实例都可以动态部署 ...

最新文章

  1. Nature:大脑佛一点,活得久一点,这是哈佛医学院的最新研究
  2. hihocoder 1107 : Shortest Proper Prefix
  3. js怎么调用wasm_对于WebAssembly编译出来的.wasm文件js如何调用
  4. BugkuCTF-Crypto题这不是md5
  5. C++编程题积累——for循环判断条件陷阱
  6. SQL Server 2008修改数据库为多用户模式
  7. Java中volatile关键字实现原理
  8. mysql存储过程删除_MySQL 存储过程删除大表
  9. 电容的q值计算公式_(生活小贴士)一分钟了解“三星贴片电容的结构与材料特性”...
  10. wubi for ubuntu 9.04 无法运行
  11. 概率论与数理统计浙大第五版 第一章 部分习题+R代码
  12. iOS创建苹果证书、制作p12证书流程
  13. 计算机毕业设计java+jsp幼儿园信息网站(源码+系统+mysql数据库+Lw文档)
  14. 双态IT时代,你需要什么样的IT咨询服务?
  15. Arcgis 地理配准步骤(底图校正)
  16. 密码库LibTomCrypt学习记录——(2.13)分组密码算法的工作模式——CCM加密认证模式
  17. 制造业数字化转型存在哪些问题
  18. 手机定向root,指定APP获取root权限
  19. web课程设计 基于html+css+javascript+jquery女性化妆品商城
  20. 2017-2018-2 20179204《网络攻防实践》linux基础

热门文章

  1. android面试必看书籍,花三分钟看完这篇文章你就懂了
  2. css文本阴影变大,css如何实现字体长阴影效果
  3. 微信H5页面跳转小程序 - Vue中使用微信开放标签<wx-open-launch-weapp>
  4. 用Spring Boot完成微信小程序登录
  5. 什么是X86 CPU?
  6. 一文深入JQuery
  7. 2022-2028年中国应急行业市场发展现状及竞争格局预测报告
  8. 实习技术员的基本功(一)
  9. 【周年福利Round2】都0202年了,您还不会Elasticsearch?
  10. 2020四川大学计算机保研夏令营经验