Consul是HashiCorp公司推出的开源工具,Consul由Go语言开发,部署起来非常容易,只需要极少的可执行程序和配置文件,具有绿色、轻量级的特点。Consul是分布式的、高可用的、 可横向扩展的用于实现分布式系统的服务发现与配置。
首页> 学海无涯> 微服务> Consul 服务注册发现
Consul 服务注册发现
摘要 Consul是HashiCorp公司推出的开源工具,Consul由Go语言开发,部署起来非常容易,只需要极少的可执行程序和配置文件,具有绿色、轻量级的特点。Consul是分布式的、高可用的、 可横向扩展的用于实现分布式系统的服务发现与配置。
前言 

Consul由Go语言开发,部署起来非常容易,只需要极少的可执行程序和配置文件,具有绿色、轻量级的特点。Consul分布式的、高可用的、 可横向扩展的用于实现分布式系统的服务发现与配置。 

特点
  • 1、服务发现(Service Discovery):Consul提供了通过DNS或者HTTP接口的方式来注册服务和发现服务。一些外部的服务通过Consul很容易的找到它所依赖的服务。
  • 2、健康检查(Health Checking):Consul的Client可以提供任意数量的健康检查,既可以与给定的服务相关联(“webserver是否返回200 OK”),也可以与本地节点相关联(“内存利用率是否低于90%”)。操作员可以使用这些信息来监视集群的健康状况,服务发现组件可以使用这些信息将流量从不健康的主机路由出去。
  • 3、Key/Value存储:应用程序可以根据自己的需要使用Consul提供的Key/Value存储。 Consul提供了简单易用的HTTP接口,结合其他工具可以实现动态配置、功能标记、领袖选举等等功能 可用于分布式锁的
  • 4、安全服务通信:Consul可以为服务生成和分发TLS证书,以建立相互的TLS连接。意图可用于定义允许哪些服务通信。服务分割可以很容易地进行管理,其目的是可以实时更改的,而不是使用复杂的网络拓扑和静态防火墙规则。
  • 多数据中心:Consul支持开箱即用的多数据中心. 这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域。


Consul  集群架构图



  


Consul的配置

1、windows 安装 Consul

安装包在项目的根目录下 /DevelopmentPackage /consul_1.8.0_windows_amd64.zip 解压后的文件 consul.exe



2、启动Consul 服务

consul agent -dev    --简单一行命令启动服务


consul启动效果  


3、结合.net core 注册服务、以及服务发现

安装 consul neget 包
1、Consul 1.6.1.1
2、NConsul 0.7.4


  

 

4、appsettings.json 配置服务注册地址

{
"Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*", "ip": "127.0.0.1", "port": 5000, "weight": 1, "ConsulAddress": "http://localhost:8500/", "ConsulCenter": "dc1" }



5、Startup Configure 添加服务注册

//服务注册
this.Configuration.ConsulRegist();

using Consul;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Contione.Microservices.Service01.Utility
{
public static class ConsulHelper
{
public static async void ConsulRegist(this IConfiguration configuration)
{
string ip = configuration["ip"];
int port = int.Parse(configuration["port"]);
int weight = string.IsNullOrWhiteSpace(configuration["weight"]) ? 1 : int.Parse(configuration["weight"]);
using (ConsulClient client = new ConsulClient(c =>
{
c.Address = new Uri(configuration["ConsulAddress"]);
c.Datacenter = configuration["ConsulCenter"];
}))
{
await client.Agent.ServiceRegister(new AgentServiceRegistration()
{
ID = "service " + ip + ":" + port,
Name = "Contione.Microservices.Consul",
Address = ip,
Port = port,
Tags = new string[] { weight.ToString() },
Check = new AgentServiceCheck()
{
Interval = TimeSpan.FromSeconds(12),
HTTP = $"http://{ip}:{port}/api/health/index",
Timeout = TimeSpan.FromSeconds(5),
DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(20)
}
});

Console.WriteLine($"{ip}:{port}--weight:{weight}");
}
}
}
}


6、启动项目 预览效果


 

 

7、扩展篇docker 搭建 Consul 集群

1. 拉取consul官方镜像

docker pull consul:latest


2、启动三个节点
docker run -d --name=node1 --restart=always \
-e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' \
-p 8300:8300 \
-p 8301:8301 \
-p 8301:8301/udp \
-p 8302:8302/udp \
-p 8302:8302 \
-p 8400:8400 \
-p 8500:8500 \
-p 8600:8600 \
-h node1 \
consul agent -server -bind=0.0.0.0 -bootstrap-expect=3 -node=node1 \
-data-dir=/tmp/data-dir -client 0.0.0.0 -ui


docker run -d --name=node2 --restart=always \
-e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' \
-p 9300:8300 \
-p 9301:8301 \
-p 9301:8301/udp \
-p 9302:8302/udp \
-p 9302:8302 \
-p 9400:8400 \
-p 9500:8500 \
-p 9600:8600 \
-h node2 \
consul agent -server -bind=0.0.0.0 \
-join=123.57.174.20 -node-id=$(uuidgen | awk '{print tolower($0)}') \
-node=node2 \
-data-dir=/tmp/data-dir -client 0.0.0.0 -ui


docker run -d --name=node3 --restart=always \
-e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' \
-p 10300:8300 \
-p 10301:8301 \
-p 10301:8301/udp \
-p 10302:8302/udp \
-p 10302:8302 \
-p 10400:8400 \
-p 10500:8500 \
-p 10600:8600 \
-h node2 \
consul agent -server -bind=0.0.0.0 \
-join=123.57.174.20 -node-id=$(uuidgen | awk '{print tolower($0)}') \
-node=node3 \
-data-dir=/tmp/data-dir -client 0.0.0.0 -ui
dotnet Contione.Microservices.OcelotGateway.dll --urls="http://*:8089" --ip="127.0.0.1" --port=8089

dotnet Contione.Microservices.Service02.dll --urls="http://*:5727" --ip="127.0.0.1" --port=5727 --weight=1


代码地址

附件地址   

版权声明:本文由Contione原创出品,转载请注明出处!

本文链接:https://contione.cn/article/detail/22

本文配乐
来说两句吧
最新评论
  • 不想知道!
    不想知道!

    本文主要介绍.net core Consul 服务注册发现 后面会介绍 Ocelot 网关实现 路由、请求聚合、服务发现、认证、鉴权、限流熔断等