Consul简介:

 Consul是一种服务网格解决方案,提供具有服务发现,配置和分段功能的全功能控制平面。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建完整的服务网格。Consul需要一个数据平面,并支持代理和本机集成模型。Consul附带了一个简单的内置代理,因此开箱即用,但也支持Envoy等第三方代理集成。

 特点:

  • 服务发现: Consul的客户端可用提供一个服务,比如 api 或者mysql ,另外一些客户端可用使用Consul去发现一个指定服务的提供者.通过DNS或者HTTP应用程序可用很容易的找到他所依赖的服务.
  • 健康检查: Consul客户端可用提供任意数量的健康检查,指定一个服务(比如:webserver是否返回了200 OK 状态码)或者使用本地节点(比如:内存使用是否大于90%). 这个信息可由operator用来监视集群的健康.被服务发现组件用来避免将流量发送到不健康的主机.
  • Key/Value存储: 应用程序可用根据自己的需要使用Consul的层级的Key/Value存储.比如动态配置,功能标记,协调,领袖选举等等,简单的HTTP API让他更易于使用.
  • 多数据中心: Consul支持开箱即用的多数据中心.这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域.

Consul安装运行:

 Consul支持各种平台的安装,可以前往https://www.consul.io/downloads.html下载相关安装包,也可以使用docker部署,本次采用docker部署方式实现:

 1、拉取consul镜像  

docker pull consul

 2、配置并运行Consul服务器  

docker run \
-d \
-p 8500:8500 \
-p 8600:8600/udp \
--name=badger \
consul agent -server -ui -node=server -bootstrap-expect=1 -client=0.0.0.0

 3、打开地址http://localhost:8500/ui/dc1/services查看consului界面,基本运行效果如下图:

  

简单使用

 本次继续使用 IdentityServer.Demo 中,cz.Api.Goods、cz.Api.Order两个项目进行改造,实现服务注册和服务发现效果,首先调整两个接口方法返回结果:

cz.Api.Goods项目:
public IActionResult Get()
{
var result = new
{
Message = $"Name:{nameof(cz.Api.Goods)},Time:{DateTime.Now}",
LocalIp = Request.HttpContext.Connection.LocalIpAddress.ToString(),
};
return Ok(result);
} cz.Api.Order项目:
[HttpGet]
public IActionResult Get()
{
var result = new
{
Message = $"Name:{nameof(cz.Api.Order)},Time:{DateTime.Now}",
IP = Request.HttpContext.Connection.LocalIpAddress.ToString(),
};
return Ok(result);
}

  

  • 服务注册:

    1、添加Consul配置内容:

 "Consul": {
"Address": "http://host.docker.internal:8500",
"HealthCheck": "/healthcheck",
"Name": "cz.Api.Goods",
"Ip": "host.docker.internal"
}

     因为会在docker中运行:使用host.docker.internal代替localhost

    2、注册Consul组件:

     A:在两个项目中添加Consul包:使用命令:Install-Package Consul、

     B:添加心跳检查控制器:      

[Route("api/[controller]")]
[ApiController]
public class HealthCheckController : ControllerBase
{
/// <summary>
/// 健康检查
/// </summary>
/// <returns></returns>
[HttpGet]
public IActionResult api()
{
return Ok();
}
}

     C:注册组件:在项目项目中添加ConsulExtensions方法类:

public static class ConsulExtensions
{
public static IApplicationBuilder UseConul(this IApplicationBuilder app, IConfiguration configuration, IHostApplicationLifetime lifetime)
{
var client = new ConsulClient(options =>
{
// Consul客户端地址
options.Address = new Uri(configuration["Consul:Address"]);
}); var registration = new AgentServiceRegistration
{
// 唯一Id
ID = Guid.NewGuid().ToString(),
// 服务名
Name = configuration["Consul:Name"],
// 服务绑定IP
Address = configuration["Consul:Ip"],
// 服务绑定端口
Port = Convert.ToInt32(configuration["Consul:Port"]),
Check = new AgentServiceCheck
{
// 服务启动多久后注册
DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),
// 健康检查时间间隔
Interval = TimeSpan.FromSeconds(10),
// 健康检查地址
HTTP = $"http://{configuration["Consul:Ip"]}:{configuration["Consul:Port"]}{configuration["Consul:HealthCheck"]}",
// 超时时间
Timeout = TimeSpan.FromSeconds(5)
}
}; // 注册服务
client.Agent.ServiceRegister(registration).Wait();
// 应用程序终止时,取消服务注册
lifetime.ApplicationStopping.Register(() =>
{
client.Agent.ServiceDeregister(registration.ID).Wait();
}); return app;
}
}

      在Startup文件中:使用该方法:      

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime lifetime)
{
……
app.UseConul(Configuration, lifetime);
}

    D:添加Docker操作,编译镜像;运行镜像

      在解决方案所在目录执行docker命令:      

编译镜像:
docker build -t cz.api.goods:dev -f ./cz.Api.Goods/Dockerfile .
docker build -t cz.api.order:dev -f ./cz.Api.Order/Dockerfile .
运行镜像

 docker run -d -p 5050:80 --name cz.api.goods_1 cz.api.goods:dev
 docker run -d -p 5051:80 --name cz.api.goods_2 cz.api.goods:dev
 docker run -d -p 5052:80 --name cz.api.goods_3 cz.api.goods:dev

 docker run -d -p 5060:80 --name cz.api.order_1 cz.api.order:dev
 docker run -d -p 5061:80 --name cz.api.order_2 cz.api.order:dev
 docker run -d -p 5062:80 --name cz.api.order_3 cz.api.order:dev

       

   E:进入Consul的UI界面查看服务注册情况,注册成功

    

    

    

后续:

  后续将进一步对Consul进行学习验证,以及对原理进一步了解。

参考:

官方文档:

https://www.consul.io/docs

https://www.consul.io/docs/guides/containers-guide 

源码github: https://github.com/cwsheng/Consul.Demo.git

 

Consul 学习笔记-服务注册的更多相关文章

  1. Consul 学习笔记—服务发现

    前言: 上一篇文章简单实用Consul试下服务注册,本篇继续学习Consul中的另外特性:服务发现.KV操作 :以及对上篇文章中存在的问题进行解决 问题解决 在上一篇文章中,注册服务提示检查失败. 通 ...

  2. Docker+Consul+Registrator 实现服务注册与发现

    Docker+Consul+Registrator实现服务注册与发现 逻辑图 实现nginx节点自动化加入容器IP代理 1.三台Consul agent server作为高可用通过Consul Tem ...

  3. Consul之:服务注册与发现

    一.服务的管理(注册与发现)有三种方式: 1:通过配置文件的方式静态注册2:通过HTTP API接口来动态注册(spring cloud使用方式,spring cloud中使用的是consul api ...

  4. spring cloud学习(一) 服务注册

    首先spring-cloud相关的简介可以去百度搜索,这里就不多说了,这里分享一个翻译spring cloud官网的中文网站spring cloud中文网 这个学习项目的代码放在 https://gi ...

  5. python与consul 实现gRPC服务注册-发现

    背景 通过对gRPC的介绍我们知道,当正常启动服务后,我们只需要知道ip,port就可以进行gRPC的连接.可以想到,这种方式并不适合用于线上环境,因为这样直连的话就失去了扩展性,当需要多机部署的时候 ...

  6. .Net Core 商城微服务项目系列(二):使用Ocelot + Consul构建具备服务注册和发现功能的网关

    1.服务注册 在上一篇的鉴权和登录服务中分别通过NuGet引用Consul这个包,同时新增AppBuilderExtensions类: public static class AppBuilderEx ...

  7. SpringCloud学习--Eureka 服务注册与发现

    目录 一:构建项目 二:服务注册与发现 为什么选择Eureka,请看上一篇博客 Eureka -- 浅谈Eureka 项目构建 IDEA 选择 New Project 选择 Spring Initia ...

  8. 微服务Consul系列之服务注册与服务发现

    在进行服务注册之前先确认集群是否建立,关于服务注册可以看上篇微服务Consul系列之集群搭建的介绍,两种注册方式:一种是注册HTTP API.另一种是通过配置文件定义,下面讲解的是基于后者配置文件定义 ...

  9. 【转】用 Consul 来做服务注册与服务发现

    原文:https://segmentfault.com/a/1190000018731395?utm_source=tag-newest ------------------------------- ...

随机推荐

  1. beautifulsoup教程

    beautifulsoup教程 BeautifulSoup4是爬虫必学的技能.BeautifulSoup最主要的功能是从网页抓取数据,Beautiful Soup自动将输入文档转换为Unicode编码 ...

  2. Oracle12C创建视图权限不足

    授权: GRANT CREATE VIEW TO c##scott; 作者:彼岸舞 时间:2020\06\23 内容关于:Oracle 本文属于作者原创,未经允许,禁止转发

  3. 测试JsonAnalyzer解析Json的十一个测试用例

    目测以下测试用例都是通过的. 01. 原文={"status":"","message":"success"," ...

  4. SQL分词器1.10版

    处理SQL及分词效果: select * from ( select rownum as rn,tb1.stuid,tb1.summary from ( select stuid,sum(score) ...

  5. docker 修改容器配置文件

    启动docker镜像命令docker run 可以指定端口映射,但是容器一旦创建就无法在通过命令修改.通常是保存镜像在创建一个新的容器.有没有办法不保存镜像直接修改这个容器呢?答案是有的,本文已mys ...

  6. Java通过http协议发送Get和Post请求

    https://blog.csdn.net/qq_32599479/article/details/94439131

  7. windows-android-appium环境搭建

    一.安装jdk 安装jdk1.7以上版本,会生成一个jdk目录,和单独的jre目录(注意:不是jdk里面的jre,时安装过程中设置的那个jre路径)安装完成后并配置环境变量 在系统环境变量中,新建:J ...

  8. appium的基本环境配置

    1.先安装jdk1.7或jdk1.8之后,并配置好环境变量 2.安装Android SDK(安卓软件开发包),测试Android手机必然要安装Android SDK,例如android-sdk_r24 ...

  9. Docker镜像下载很慢,各种加速无效

    mcr.microsoft.com/dotnet/......   改成: dockerhub.azk8s.cn/dotnet/...... 或 mcr.azk8s.cn/dotnet/......

  10. 【微服务】 数据库案例理解Spring Security OAuth

    突然被问,你是做技术的怎么不走技术路线呢?是啊~仔细想想至今做了这么多年的技术,研发过的系统&产品五花八门,涉及到的领域各行各业:政府.军队.公安.国安.石油&石化.金融.教育.华为等 ...