来,Consul 服务发现入个门(一看就会的那种)
前言
在微服务架构中,对于一个系统,会划分出多个微服务,而且都是独立开发、独立部署,最后聚合在一起形成一个系统提供服务。当服务数量增多时,这些小服务怎么管理?调用方又怎么能确定服务的IP和端口?服务挂掉了又怎么办?单靠人工处理已经不太现实,使用系统统一管理就是最好的选择,常用的服务发现产品有:Consul、Zookeeper、Etcd、Eureka等,而对于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综艺圈",跟我一起学~~~
来,Consul 服务发现入个门(一看就会的那种)的更多相关文章
- Redola.Rpc 集成 Consul 服务发现
Redola.Rpc 解决了什么问题? Redola.Rpc 是一个使用 C# 开发的 RPC 框架,代码开源在 GitHub 上.目前版本仅支持 .NET Framework 4.6 以上版本,未来 ...
- 扩展gRPC支持consul服务发现和Polly策略
gRPC由于需要用工具生成代码实现,可开发性不是很高,在扩展这方面不是很友好 最近研究了下,进行了扩展,不需要额外的工具生成,直接使用默认Grpc.Tools生成的代理类即可 相关源码在文章底部 客户 ...
- 微服务(入门三):netcore ocelot api网关结合consul服务发现
简介 api网关是提供给外部调用的统一入口,类似于dns,所有的请求统一先到api网关,由api网关进行指定内网链接. ocelot是基于netcore开发的开源API网关项目,功能强大,使用方便,它 ...
- .NET Core微服务实施之Consul服务发现与治理
.NET Core微服务实施之Consul服务发现与治理 Consul官网:https://www.consul.io Consul下载地址:https://www.consul.io/downl ...
- .NetCore Cap 注册 Consul 服务发现
注册服务发现 需要使用Cap中的UseDiscovery方法 具体用法如下 var capConsulConfig = Configuration.GetSection("CapConsul ...
- 基于Docker的Consul服务发现集群搭建
在去年的.NET Core微服务系列文章中,初步学习了一下Consul服务发现,总结了两篇文章.本次基于Docker部署的方式,以一个Demo示例来搭建一个Consul的示例集群,最后给出一个HA的架 ...
- 学习搭建 Consul 服务发现与服务网格-有丰富的示例和图片
目录 第一部分:Consul 基础 1,Consul 介绍 2,安装 Consul Ubuntu/Debian 系统 Centos/RHEL 系统 检查安装 3,运行 Consul Agent 启动 ...
- Consul 服务发现和配置
Service discovery and configuration made easy. Distributed, highly available, and datacenter-aware. ...
- consul服务发现和配置共享的软件,
Consul 是什么 consul是一个支持多数据中心分布式高可用服务发现和配置共享的服务软件,由HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2. ...
随机推荐
- SSM框架整合(Spring + SpringMVC + MyBatis)
搭建环境 使用Spring(业务层)整合其他的框架SpringMVC(表现层)和MyBatis(持久层) Spring框架 创建数据库表 CREATE DATABASE ssm; USE ssm; C ...
- C++实现二叉树的基本操作:建立、遍历、计算深度、节点数、叶子数等
题意: 代码实现: #include<iostream> #include<queue> #include<stack> using namespace std; ...
- Django实现文件上传
一.HTML <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- Java中的变量之成员变量、本地变量与类变量
Java中的变量: 1.成员变量(实例变量,属性) 2.本地变量(局部变量) 3.类变量(静态属性) 一.成员变量(实例变量,属性) 1.1-成员变量:(在类中定义, 访问修饰符 修饰符 ...
- 进程控制——fork-and-exec、system、wait
forc-and-exec流程 父进程与子进程之间的关系十分复杂,最大的复杂点在于进程间相互调用.Linux下这一流程称为fork-and-exec.父进程通过fork的方式产生一个一模一样的子进程, ...
- USB2.0协议学习笔记---基本概念
概念 USB是一种串行通信总线(Universal Serial Bus),经历的版本有USB1.0,USB1.1.USB2.0等.USB是一种主从模式的结构,因此它无法在设备与设备.主机与主机之间 ...
- javascript questions & code review
javascript questions & code review refs https://github.com/learning-js-by-reading-source-codes/j ...
- 惠普机械键盘 K10GL 使用评测
惠普机械键盘 GK100 使用评测 手感太差,不是 RGB 背光 惠普(HP) K10GL 机械键盘 有线 LED背光机械键盘 87键 混光青轴 refs https://item.jd.com/10 ...
- Google & Chrome console & text adventure game
Google & Chrome console & text adventure game Google's text adventure game https://www.googl ...
- webpack 5
webpack 5 webpack 5 requires at least Node.js 10.13.0 (LTS). https://webpack.js.org/migrate/5/ https ...