来,Consul 服务发现入个门(一看就会的那种)

前言

在微服务架构中,对于一个系统,会划分出多个微服务,而且都是独立开发、独立部署,最后聚合在一起形成一个系统提供服务。当服务数量增多时,这些小服务怎么管理?调用方又怎么能确定服务的IP和端口?服务挂掉了又怎么办?单靠人工处理已经不太现实,使用系统统一管理就是最好的选择,常用的服务发现产品有:ConsulZookeeperEtcdEureka等,而对于Consul在.NetCore中是很火很火的,所以接下来肯定先聊它喽。

正文

Consul是一个支持多数据中心、分布式、高可用的服务发现和配置共享的系统,开箱即用,主要功能如下:

  • 服务发现:可以通过Consul客户端注册服务,这里服务可以是API站点、Redis服务器、MySql服务器等;当其他客户端需要使用对应的服务时,Consu可以通过DNS或HTTP的形式将服务返回给所需客户端;无需再手动指定IP和端口,由Consul统一管理。

  • 健康检查:Consul提供对各服务进行检查的功能,相关人员可以通过检查信息关注各服务的运行情况;而对于的服务的使用者,可以避免访问不健康的服务,如当一个API站点挂掉了,调用方从Consul中获取服务信息时就获取不到,而是返回健康的服务信息,从而保证调用API正常。

  • 键值对存储:可以存储键值对数据,很适合当配置中心使用。比如有多个服务,每个服务都一些配置信息,可以将其统一配置在Consul中,避免每一个服务重复配置,很大程度降低了配置错误导致的风险。

  • 多数据中心:Consul支持多个开箱即用的数据中心,每个数据中心独立运行。

简单了解Consul功能之后,接下来就先说说服务发现健康检查的应用,大概的一个流程如下图:

上图简单描述

  • 各服务通过配置文件或代码的形式进行注册,即把信息报给Consul;

  • Consul根据注册的信息,对已经注册服务进行健康检查;Grpc、TCP、HTTP方式都可以;

  • 客户端如果需要使用服务信息,如IP和端口,可以通过Consul进行获取健康的服务(服务发现);DNS和HTTP两种方式都可以;

接来从安装开始,做一个Demo演示,包括服务注册、服务查看、健康检查、服务失效之后发邮件通知功能,算是从开发到维护走了一个流程(不过只是演示的那种)。

1. 安装

Consul的安装可以说超级简单,进官网->下载->解压就完成安装啦,官网地址:https://www.consul.io/;

找到下载页面,选择适合自己系统的版本,直接下载就行,如下图:

下载完成之后,直接解压,然后打开命令行工具,运行一下是否正常,如下图:

2. 注册服务

  • 配置文件形式

    首先肯定需要准备一个配置文件,这里为了查看Consul运行时监控的服务数据,也可以指定对应数据输出的目录,所以还需要一个数据目录,如下:


    config:作为配置文件的存放位置,Conusl启动时可以指定配置文件位置,然后可以自动加载该目录下所有json文件;

    data:这个就是一个空文件夹,用于存储Consul运行时产生的数据,这个不是必须的。

    有了目录结构之后,然后在config中创建一个services.json文件,里面内容如下:


    配置信息见上图已经做了相关说明,而对于健康检查,因为上图配置的是以HTTP的形式检查API服务是否正常,即能否正常访问对应地址,当然可以根据场景需要配置检测方式,比如Grpc、TCP、脚本等。

    配置文件准备好了之后,可以直接运行Consul啦,这里为了快速入门,先以开发模式运行,如下:


    命令解析:

    agent:运行代理;

    -dev:以开发模式运行,快速开启一个Server,信息如上图;

    -confile-file:指定Consul配置文件所在的目录,然后就自动加载该目录下的所有json文件;

    -data-dir : 指定Consul运行时存储数据的目录,一般包含服务的状态及相关信息;

    用配置文件这种方式,代码无需更改,只需保证服务运行的时候对应的IP地址、端口、健康检查的路径正确即可。由于现在还没有对应的服务,根据上面配置的的信息,每个5s会检查一次,当前检查的服务肯定是不健康的,Consul控制台会持续输出如下信息:


    根据配置的信息添加一个服务,新建一个WebAPI项目,增加一个Health健康检查的Controller,然后指定端口为5000运行,控制器代码如下:


    运行之后,Consul 代理就检测到了,如下:


  • 嵌入代码形式

    代码注册的形式需要引入Consul包,然后在代码中指定Consul地址和配置相关服务信息即可,其他无需改变,注册代码逻辑如下:

    先在配置文件中配置相关信息:


    服务注册代码如下:


    注册服务方法完成之后,直接在Startup文件中Configure方法的最后调用即可。然后指定对应端口启动服务即可,演示设置的端口为6688,这样服务就注册完啦,Consul也能检测到。

3. 查看服务

服务完成注册之后,肯定是要需要查看或使用,主要有以下三种方式:

  • UI形式

    Consul提供对应的页面查看注册服务的相关信息,当然也可以配置相关信息。当Consul启动之后,就可以通过http://localhost:8500/(这里演示是本地)这个地址访问到对应的界面,如下:


    界面就不挨个截图啦,小伙伴自己点点。这个可视化界面还是很给力的。

  • DNS和HTTP形式

    同样也可以通过用命令方式进行查看,有两种形式,DNS和HTTP。这里先用HTTP的方式演示,DNS方式留给小伙伴吧,很简单的。

    HTTP形式,直接调用接口即可(当然可以进行权限控制);


    查询服务常用的接口地址如下:

    查询所有服务:
    http://localhost:8500/v1/catalog/services

    根据服务名称查询服务,服务名称就是在注册服务时指定的名称:
    http://localhost:8500/v1/catalog/service/服务名称

    当同名称的服务有多个时,可以根据Tag过滤:
    http://localhost:8500/v1/catalog/service/服务名称?tag=test6688

    查询其他类型信息也和上面类似,比如查询节点信息、查询数据中心信息;

  • 代码形式

    需要依赖Consul包,代码如下:


    运行结果如下:


    当然这种形式也能获取Consul其他信息,小伙伴调试一下就知道啦;

4. 监视服务(异常通知相关人员)

对于服务本身,可能因为网络或软硬件的问题,导致服务挂掉,如果没有及时恢复,有些业务可能会导致后果比较严重,所以当服务挂掉时,及时通知是必须的;这里演示使用的是邮件的方式,需要简单设置一下发送邮箱;这里使用的是QQ邮箱发出,需要开启QQ邮箱相关服务,在QQ邮箱设置中开启即可,如下图:

开启的时候需发送短信进行验证,然后会获得一个授权码,在后面发送邮件时会用到。

为了演示方便,发送邮件通知的逻辑是写在业务服务中,其实可以单独出来一个服务专门负责通知即可。代码逻辑如下:

增加一个通知接口,供监听调用,当监听到服务故障时,就调用该接口发送邮件即可:

代码准备好了,现在需要配置监视,只需要在配置目录下增加监视的配置文件即可,这里取名为watchs.json,内容如下:

配置文件完成之后,重启Consul即可,命令和刚开始启动的一样;然后将服务启动,为了测试方便,服务用命令的方式启动,方便关闭,命令如下:

dotnet ConsulCodeDemo.dll --urls "http://*:6688"  # 指定端口启动
dotnet ConsulConfigDemo.dll # 默认就是5000,所以不用指定啦

注:执行以上命令需要进入对应编译的文件目录;

服务正常运行时,在Consul界面中可以看到各服务都是健康状态,然后将端口为5000的这个服务关掉(因为配置邮件发送的接口在6688上),Consul检测到就会自动调用接口,发送相关邮件。

相关人员收到信息就可以及时进行处理。

源码地址:https://github.com/zyq025/IDS4Demo/tree/main/ConsulDemo

总结

好了,Consul初探先到这吧,入门还差点,毕竟还有很多没讲,关于常用命令、集群搭建、ACL配置等都没涉及,所以下一篇来聊聊集群搭建和ACL配置,对于常用命令的使用,一边搭建环境,一边进行解释说明。

一个被程序搞丑的帅小伙,关注"Code综艺圈",跟我一起学~~~

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304093.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql数据库的安装和配置文件_MySQL 数据库安装与配置详解

目录一、概述MySQL 版本:5.7.17客户端工具:NavicatforMySQL** 二、MySQL 安装**安装条件:如果 Windows Server 2003 在安装.net framework4.0 安装过程中报错: net framework 4.0 安装时提示产生阻滞问题:运行安装程序前&#xff…

Magicodes.IE Excel合并行数据导入教程

说明Magicodes.IE.Excel目前已支持合并行单元格导入,如本篇教程所示。安装包Magicodes.IE.ExcelInstall-PackageMagicodes.IE.Excel添加Dto参考示例代码如下所示:public class MergeRowsImportDto {[ImporterHeader(Name "学号")]public long…

D轮融资1亿美金,6亿美金估值,3位计算机学霸如何带领海归团队创造业内神话?!

顺为资本在创始合伙人雷军及许达来的带领下成功领投了51Talk、丁香园、爱奇艺、一起作业等超级公司有近20家公司估值超过10亿美元如今顺为资本为何愿意投资这家公司?酷家乐6年破6亿美金的公司估值17年全年营收超3亿有着设计师300万这家以家居云设计为核心的创业公司…

Navicat

作为Oracle, MySQL, Sqlite, PostgreSQL的统一客户端,Navicat无疑是最方便简洁的,而且界面非常友好。导入导出支持的格式也很全。 在连Oracle的时候,会报错说字符集不支持。只要手工指定OCI就好,方法如下: 在OCI libra…

分布式链路追踪框架的基本实现原理

目录分布式追踪分布式系统分布式追踪分布式追踪有什么用呢什么是分布式追踪Dapper分布式追踪系统的实现跟踪树和 spanJaeger 和 OpenTracingOpenTracing 数据模型Span 格式TraceOpenTracingJaeger 结构SpanOpenTracing API分布式追踪什么是分布式追踪分布式系统当我们使用 Goog…

mysql外键约束创建及删除_MySQL中的外键的创建,约束和删除

一、外键的创建语法一:后续添加方法alter table 表名 add constraint 约束名 foreign key(当前表中约束的字段) references 主表表名(要约束的字段名);alter table student add constraint fk_class_student foreign key(cls_id) class(cls_id) on update cascade o…

不爱读书怎么办?用这个新奇的方法,熟知137亿年来的地球通史

今天,小木为模友们挑选的小荐货:《地球通史墙书》第一次接触《地球通史》墙书的时候,虽然“地球通史”的概念非常吸引我,但“墙书”的叫法怎么听都像是一个噱头,所以小木一直有些莫名的排斥,直到在小天把试…

测试驱动开发简介

本文节选自《测试驱动的面向对象软件开发》 第1章第4节“测试驱动开发简介” TDD核心的循环是:写一个测试;写一些代码让测试通过;重构代码,使被测试特征的实现尽可能简单。重复这个过程,如图1-1所示。 图1-1基本TDD循环…

在 .NET 中使用 Flurl 高效处理Http请求

简介官方介绍,Flurl是一个现代的,流利的,支持异步的,可测试的,可移植的,URL增强和Http客户端组件。Url构建现在有一个登录的接口,地址如下:https://www.some-api.com/login?nameLee…

图像还可以这样玩!如何用波的算法处理图像

我对图像处理一直很感兴趣,曾经写过好几篇博客。前几天读到一篇文章,它提到图像其实是一种波,可以用波的算法处理图像。我顿时有一种醍醐灌顶的感觉,从没想到这两个领域是相关的,图像还可以这样玩!下面我就…

[存档]CxServer的项目周期管理

2019独角兽企业重金招聘Python工程师标准>>> 主题:大学生创新性实验计划 项目周期管理 作者:宋志民备注:本文为《 基于CxServer的大学生科学研究项目管理实践探索》的一部分 内容: 一般情况下大学生科研计划的种类较多…

在职场中,长得漂亮真的有用吗?

非常有用。下面五张图,每张图介绍一个研究,都可以从一个侧面回答问题。01 企业对求职者的颜值有多看重?这张图来自两位学者对国内某网站超过100万份招聘广告的分析结果。总的来看,有7.7%的企业会对应聘者的外貌提出要求&#xff0…

TIOBE 3月榜单:新功能将加入,C语言仍高居榜首

喜欢就关注我们吧!TIOBE 公布了 2021 年 3 月的编程语言排行榜。本月 TIOBE 指数没有什么有趣的变化。因此,TIOBE CEO Paul Jansen 表示,其打算透露一些近期将加入至榜单中的新功能。第一个问题涉及到一个 bug 修复。由于使用了复杂的算法&am…

java jdk win10安装_Java 安装 JDK WIN10

JDK的全称是Java SE Development Kit它的官方网站只要用Goole搜索下即可找到,官方提供JDK8、11、12的下载入口。我们点击Java SE Development Kit 8进入下载。我们下载的版本是jdk-8u91-windows-x64.exe安装过程按导向默认安装,中途什么选项都不改。安装…

twitter达人不能不知的缩写

今天上午有人在新闻编辑室问“嘿,Twitter上的MT是什么意思?”,让我们觉得编制一个Twitter缩写的列表可能会有帮助。 这就是为什么我们要做这些的原因。想要全面地完成其实不容易,所以请在评论中增加这个列表中缺失的缩写吧。技术类…

50张神图……好不容易才找到完整版!

描述:1.耶鲁大学耗时5年的研究成果。 如果你看见这个舞女是顺时针转,说明你用的是右脑 如果是逆时针转,说明你用的左脑。 据说,14%的美国人可以两个方向都能看见 可以和别人一起看,测试下,一般不同人同时看…

编程到底难在哪里?

写在前面:这篇回答并不是讲述在生活中程序员如何买苹果,而是以买苹果为例说明程序员如何解决问题。程序员需要对问题进行透彻的分析,理清其涉及的所有细节,预测可能发生的所有意外与非意外的情况,列出解决方案的所有步…

DDD实战课--学习笔记

目录学好了DDD,你能做什么?领域驱动设计:微服务设计为什么要选择DDD?领域、子域、核心域、通用域和支撑域:傻傻分不清?限界上下文:定义领域边界的利器实体和值对象:从领域模型的基础…

如何预测未来房价的发展

1946年2月16日,是一个值得纪念的日子。在这一天,人类历史上真正意义上的第一台电子计算机诞生了,此后计算机便随着科技的发展以强大的生命力飞速发展着。而作为用来定义计算机程序的形式语言——编程语言也紧跟计算机其后蓬勃发展&#xff0c…

《进击吧!Blazor!》系列入门教程 第一章 7.图表

作者备注《进击吧!Blazor!》是本人与张善友老师合作的Blazor零基础入门系列视频,此系列能让一个从未接触过Blazor的程序员掌握开发Blazor应用的能力。视频地址:https://space.bilibili.com/483888821/channel/detail?cid151273Bl…