Consul服务治理发现学习记录

Stella981
• 阅读 547

Consul 简介

Consul是一个服务网格(微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控)解决方案,它是一个一个分布式的,高度可用的系统,而且开发使用都很简便。它提供了一个功能齐全的控制平面,主要特点是:服务发现、健康检查、键值存储、安全服务通信、多数据中心。除了 Consul 之外,还有 Eureka、Zookeeper 等类似软件。

https://www.jianshu.com/p/7d20dc58c9fc

安装Consul

我们这里是直接在Windows上开发,所以对应下载Windows版本的。下载地址:

https://www.consul.io/downloads

下载完成后实际就是consul.exe,我们在下载位置运行cmd命令

consul agent -dev

Consul服务治理发现学习记录

然后我们打开浏览器,输 src="https://cdn.jsdelivr.net/gh/jellydong/img/images/20200807102643.png" alt="image-20200807102643159" loading="lazy">

可以看到Consul已经启动了,但是除了他自己外还没有其他服务注册进来。

服务注册

我们创建一个Api项目,比如订单服务OrderService

Consul服务治理发现学习记录

安装Consul

Consul服务治理发现学习记录

健康检查

创建完成后就是默认的项目结构,我们添加一个健康检查的Controller。健康检查的意思是Consul会根据我们的配置定时的去请求健康检查接口,判断当前服务是不是可用。避免提供挂掉的服务给消费者,当然间隔时间也会有,需要配合后面的熔断、降级使用。

using System;using Microsoft.AspNetCore.Mvc;namespace Consul.OrderService.Controllers{ [ApiController] [Route("[controller]")] public class HealthController : ControllerBase {  public IActionResult Get()  {   Console.WriteLine("调用了健康检查" + DateTime.Now);   return Ok("OK");  } }}

调用时我们输出下当前时间,可以看到Consul有没有调用健康检查。

服务注册及注销

因为这里需要指定Api的地址,所以我们配置一下获取配置。

修改Program.cs

 public static IHostBuilder CreateHostBuilder(string[] args)  {   var config = new ConfigurationBuilder().AddCommandLine(args).Build();   string ip = config["ip"];   string port = config["port"];   return Host.CreateDefaultBuilder(args)     .ConfigureWebHostDefaults(webBuilder =>     {      webBuilder.UseStartup<Startup>()       .UseUrls($"     });  }

修改Startup.cs

   public void Configure(IApplicationBuilder app, IWebHostEnvironment env,IHostApplicationLifetime applicationLifetime)  {   if (env.IsDevelopment())   {    app.UseDeveloperExceptionPage();   }   app.UseRouting();   app.UseAuthorization();   app.UseEndpoints(endpoints =>   {    endpoints.MapControllers();   });   string ip = Configuration["ip"];   int port = Convert.ToInt32(Configuration["port"]);   string serveiceName = "OrderService";   string serviceId = serveiceName + Guid.NewGuid();   using (var consulClient = new ConsulClient(ConsulConfig))   {    AgentServiceRegistration agentServiceRegistration = new AgentServiceRegistration();    //服务编号,不能重复,用 Guid 最简单     agentServiceRegistration.ID = serviceId;    //服务的名字    agentServiceRegistration.Name = serveiceName;    //服务提供者的能被消费者访问的 ip 地址(可以被其他应用访问的 地址,本地测试可以用 127.0.0.1,机房环境中一定要写自己的内网 ip 地址)     agentServiceRegistration.Address = ip;    // 服务提供者的能被消费者访问的端口     agentServiceRegistration.Port = port;    agentServiceRegistration.Check = new AgentServiceCheck()    {     //服务停止多久 后反注册(注销)      DeregisterCriticalServiceAfter = TimeSpa.........
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Spring Cloud Spring Boot mybatis 企业分布式微服务云(二)服务注册与发现(Consul)
SpringCloudConsulSpringCloudConsul项目是针对Consul的服务治理实现。Consul是一个分布式高可用的系统,它包含多个组件,但是作为一个整体,在微服务架构中为我们的基础设施提供服务发现和服务配置的工具。它包含了下面几个特性:服务发现健康检查Key/Value存储
Stella981 Stella981
2年前
Spring Cloud(二) Consul 服务治理实现
SpringCloudConsul项目是针对Consul的服务治理实现。Consul是一个分布式高可用的系统,具有分布式、高可用、高扩展性。Consul简介Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,Consul的方案更“一站式”,内
Stella981 Stella981
2年前
Consul 基本概念,同类比较和内部原理
这个文章我们主要来说一下Consul的基本概念,以及其实现的内部原理,和Eureka的比较。\1.什么是Consul?Consul是一种服务网格解决方案,提供具有服务发现,配置和分段功能的全功能控制平面。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全服务网格。Consul需要数据平面并支持代理和本机集成模型。Consul
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这