.Net5.0 微服务之服务注册与发现(Consul)
分布式结构,应用服务就不能是单个应用,必须得提供多个,相当于是这个服务的集群(单独一个服务坏了,不影响其他服务继续提供服务)。
那么基于这个应用服务的集群管理,就是服务注册与发现服务。
它主要是用来管理你的应用服务集群的。
实际情况中,你的服务会部署在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)相关推荐
- 《深入理解 Spring Cloud 与微服务构建》第十二章 服务注册和发现 Consul
<深入理解 Spring Cloud 与微服务构建>第十二章 服务注册和发现 Consul 文章目录 <深入理解 Spring Cloud 与微服务构建>第十二章 服务注册和发 ...
- SpringCloud核心教程 | 第四篇:服务注册与发现 Consul篇
Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全 ...
- 四、服务注册与发现Consul
文章目录 一.Consul 的介绍 二.Consul 的使用 2.1 Consul Server安装 2.2 微服务注册 Consul 三.注册中心的对比 一.Consul 的介绍 Consul是一套 ...
- springcloud微服务系列之服务注册与发现组件Eureka
一.Eurake的简介 二.使用Eureka进行服务的注册消费 1.创建一个服务注册中心 2.创建服务的提供者 3.创建服务的消费者 总结 一.Eurake的简介 今天我们来介绍下springclou ...
- 微服务之「Cosul 服务注册与发现 」
服务注册与发现 Consul是微服务的一个框架,是服务注册与发现的一个解决方案.在说Consul之前先来看看什么是服务注册与发现. 微服务体系中,服务注册与服务发现是两个最核心的模块.服务A调用服务B ...
- 微服务系列:服务发现与注册-----Eureka(面试突击!你想了解的Eureka都在这里.持续更新中......)
1.什么是落地SOA(面向服务架构)? SOA面向服务架构,是一种架构思想,是跨语言和平台的.SOA宗旨简单明了,根据项目服务完成架构搭建,以服务为基准点完成组件化和模块化.提供服务是项目的基本内容, ...
- 【微服务】服务之间的调用方式
文章目录 常见的远程调用方式有两种 RPC和HTTP对比 RPC有几个特点 HTTP其实就是一种网络传输协议 微服务之间相互调用的三种最常见方式 RestTemplate方式 引入Nacos注册中心 ...
- 源码分析Dubbo服务注册与发现机制RegistryDirectory)
RegistryDirectory,基于注册中心的服务发现,本文将重点探讨Dubbo是如何实现服务的自动注册与发现.从上篇文章,得知在消息消费者在创建服务调用器(Invoker)[消费者在初始时]时需 ...
- etcd 笔记(09)— 基于 etcd 实现微服务的注册与发现
1. 服务注册与发现基本概念 在单体应用向微服务架构演进的过程中,原本的巨石型应用会按照业务需求被拆分成多个微服务,每个服务提供特定的功能,也可能依赖于其他的微服务.此时,每个微服务实例都可以动态部署 ...
最新文章
- Nature:大脑佛一点,活得久一点,这是哈佛医学院的最新研究
- hihocoder 1107 : Shortest Proper Prefix
- js怎么调用wasm_对于WebAssembly编译出来的.wasm文件js如何调用
- BugkuCTF-Crypto题这不是md5
- C++编程题积累——for循环判断条件陷阱
- SQL Server 2008修改数据库为多用户模式
- Java中volatile关键字实现原理
- mysql存储过程删除_MySQL 存储过程删除大表
- 电容的q值计算公式_(生活小贴士)一分钟了解“三星贴片电容的结构与材料特性”...
- wubi for ubuntu 9.04 无法运行
- 概率论与数理统计浙大第五版 第一章 部分习题+R代码
- iOS创建苹果证书、制作p12证书流程
- 计算机毕业设计java+jsp幼儿园信息网站(源码+系统+mysql数据库+Lw文档)
- 双态IT时代,你需要什么样的IT咨询服务?
- Arcgis 地理配准步骤(底图校正)
- 密码库LibTomCrypt学习记录——(2.13)分组密码算法的工作模式——CCM加密认证模式
- 制造业数字化转型存在哪些问题
- 手机定向root,指定APP获取root权限
- web课程设计 基于html+css+javascript+jquery女性化妆品商城
- 2017-2018-2 20179204《网络攻防实践》linux基础