C#运用Consul集群举行效劳注册与发明_服务器,腾讯云

  • C#运用Consul集群举行效劳注册与发明_服务器,腾讯云已关闭评论
  • 141 人浏览
  • A+
所属分类:教程分享 首页

媒介

我个人以为,中间件的布置与运用是异常难影象的;也就是说,假如两次运用中间件的时刻距离比较长,那基本上即是要重新进修运用。

所以,我以为进修中间件的文章,越细致越好;由于,这对作者而言也是一份名贵的备忘材料。

Consul简介

Consul一个什么,我想人人经由过程搜刮引擎肯定能够搜刮到;所以,我就不在反复他的官方形貌了。

这里,我为人人供应一个更加好明白的形貌。

Consul是什么?

Consul实质上是一个Socket通讯中间件。

它重要完成了两个功用,效劳注册与发明与本身的负载平衡的集群。

我们能够把他明白为一个没有界面的应用顺序,由于没有界面,所以想启动Consul就只能运用敕令行了;也由于没有界面,一旦运用敕令行启动了Consul,那末,实行该敕令行的cmd.exe顺序,就成了Consul的宿主了;一旦封闭Cmd窗口,Consul就住手运转了。

效劳注册与发明的实质是什么?

实在效劳注册与发明的道理很简朴。

当我们在本机运转Consul时,他会自动监听8500端口;然后我们经由过程一个开源类库(这个开源类库能够在nuget上检索到,文章下面会引见),挪用其下差别的要领来向这个Consul历程发送TCP音讯,来注册效劳或许发明效劳。

Consul历程在接收到注册音讯时,就把注册的效劳信息存储到当地磁盘或内存(由于我没有详细去观察Consul存储数据是不是运用了数据库,但我们都晓得数据库的数据也是保留在当地磁盘的,所以,它肯定是把数据存进磁盘或许内存中了)。

数据中间

Consul存储数据的处所,官方为其命名为数据中间,也就是上面说的保留我们注册的效劳信息的当地磁盘或许内存。

Consul供应负载平衡的集群

Consul的集群也很好明白,在我们胜利启动Consul今后,它除了监听8500端口之外,它还监听了一个8031端口。

这个8031端口就是用于Consul集群互相通讯的。

我们都晓得集群是要两台以上的电脑的,所以,我们就必需找到两台或以上的电脑装置Consul中间件。

然后,运用Consul的敕令行,将两台电脑连接到一同,如许集群就形成了。

在集群内每台电脑上装置的Consul中间件,我们统称为效劳器代办(Agent);当集群启动后,会在多个代办效劳器之间推举出一个Leader。

推举Leader天然就是效劳器代办之间的通讯了,也就是经由过程上面提到的8031端口通讯的。

推举了Leader,效劳器代办就能够将本身的负载信息发送给Leader了,如许客户端挪用Consul检索效劳数据时,就能够去机能最优的那台机械上猎取信息了。(注:这个就是举例说明,并不是Consul的负载平衡的实在处置惩罚情势)

Consul代办效劳器装置

起首,去官网下载Consul,官网下载地点https://www.consul.io/downloads.html

拉到网站的最下方,挑选Window64-bit的Consul下载,以下图:

C#运用Consul集群举行效劳注册与发明_服务器,腾讯云

下载完成后,我们取得一个压缩包consul_1.6.2_windows_amd64.zip;解压缩后,取得consul.exe文件,以下图:

C#运用Consul集群举行效劳注册与发明_服务器,腾讯云

由于我们要运用敕令行来运转consul,所以,我们将consul.exe地点的目次添加进环境变量,如许,当我们在CMD窗口中实行consul的相干敕令时,体系就会自动将这个些敕令发送给consul.exe文件实行了。

设置环境变量以下图所示:

C#运用Consul集群举行效劳注册与发明_服务器,腾讯云

 设置完环境变量,我们翻开一个cmd的敕令行窗口,然后输入consul来确认我们的环境变量是不是设置胜利,以下图:

C#运用Consul集群举行效劳注册与发明_服务器,腾讯云

看到图中的信息,就代表我们的consul的环境变量设置胜利了,已能够运转了。

接下来,我们在这个cmd窗体中输入consul的敕令来启动consul效劳器代办,敕令以下:

consul agent -server -ui -bootstrap-expect=1 -data-dir=/tmp/consul -node=consul-1 -client=0.0.0.0 -bind=192.168.1.111 -datacenter=dc1

敕令诠释以下:

实在consul敕令人人是能够在收集上搜到它们的定义的,不过我以为诠释的照样太官方,所以,我在这里供应了一份我以为更好的诠释。

consul agent:敕令头,必须要有。

-server:外表我们如今要启动效劳器代办(agent)是效劳情势的。Consul Agent的运转情势有两种,Server情势和Client情势。其区分简朴来讲就是Server情势的Agent能够被推举为Leader,而Client情势的不能够,固然另有其他区分,有兴致人人能够自行相识。

-ui:consul运转后,会供应一个http://127.0.0.1:8500/ui/的网站,内里存储了Consul Agent各个节点以及注册的效劳等相干信息,即数据中间的网页情势表现。这个参数代表是不是建立这个网站,这个参数与这个数据中间网站有关。

bind:本机的ip地点,集群内其他代办效劳器能够经由过程这个ip来接见这台电脑的consul代办效劳器。

bootstrap-expect:是集群启动前提,指当效劳器端情势(Server情势)的代办到达这个数量后,才入手下手运转。

data-dir:是寄存数据中间数据的,该目次必需是稳固的,体系重启后也继承存在的。

datacenter:当前agent的中间数据的称号,默许是dc1。

node:节点在集群中的称号,在一个集群中必需是唯一的,默许是该节点的主机名(代表一个机械)。

client:当地ip地点,这里运用 0.0.0.0 ,就示意这个效劳器一切IP都能够,即当这台电脑有俩ip,192.168.1.111和192.168.1.112,那末经由过程这俩IP都能够接见到这台机械的consul代办效劳器。

----------------------------------------------------------------------------------------------------

运转该敕令,以下图所示:

C#运用Consul集群举行效劳注册与发明_服务器,腾讯云

能够看到,我们的Consul代办效劳已胜利运转了。

如今,我们在去另一台电脑,翻开cmd窗口,运转以下consul敕令:

consul agent -server -ui -bootstrap-expect=1 -data-dir=d:\consul -node=consul-2 -client=0.0.0.0 -bind=192.168.80.112 -datacenter=dc1 -join 192.168.80.111

能够看到,我们在敕令行最后面追加了一个join 192.168.80.111;经由过程这个敕令,我们把这台电脑的代办效劳器胜利的到场到了上文中的consul集群。

效劳注册与发明

Consul的效劳注册

起首,我们建立一个WebAPI,这里为运用了Core框架建立了一个Web API,为了轻易测试,我就直接拿当地的VisualStudio启动测试了。

建立WebAPI后,我们在Nuget中查找Consul的Net版本类库。

在Nuget中搜刮Consul,然后选中下图中的选项举行装置。

C#运用Consul集群举行效劳注册与发明_服务器,腾讯云

然后,我们在Startup文件中,增添一个函数,以下:

public static void RegisterConsul()
{
    var consulClient = new ConsulClient(p => { p.Address = new Uri($"http://127.0.0.1:8500"); });//要求注册的 Consul 地点
    //这里的这个ip 就是本机的ip,这个端口8500 这个是默许注册效劳端口 
    var httpCheck = new AgentServiceCheck()
    {
        DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//效劳启动多久后注册
        Interval = TimeSpan.FromSeconds(10),//距离牢固的时刻接见一次,https://localhost:44308/api/Health
        HTTP = $"https://localhost:44308/api/Health",//健康检查地点  44308是visualstudio启动的端口
        Timeout = TimeSpan.FromSeconds(5)
    };
     
    var registration = new AgentServiceRegistration()
    {
        Checks = new[] { httpCheck }, 
        ID = Guid.NewGuid().ToString(),
        Name = "test1",
        Address = "https://localhost/",
        Port = 44308,
        
    };

    consulClient.Agent.ServiceRegister(registration).Wait();//注册效劳 

    //consulClient.Agent.ServiceDeregister(registration.ID).Wait();//registration.ID是guid
    //当效劳住手时须要作废效劳注册,不然,下次启动效劳时,会再注册一个效劳。
    //然则,假如该效劳历久不启动,那consul会自动删除这个效劳,约莫2,3分钟就会删了 

}

然后在Configure中挪用这个要领,如许,当我们调试或运转这个项目时,就会自动将这个Webapi注册到Consul里了。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    
    app.UseHttpsRedirection();

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
    RegisterConsul();//注册本效劳到consul集群
  
}

效劳注册完后,能够接见当地数据中间的网站【http://127.0.0.1:8500/ui/dc1/services】来检察注册效劳的状况。

Consul效劳发明

效劳注册完成后,我们再建立一个控制台项目来举行效劳发明。

建立完成项目后,也须要援用consul类库,同效劳端一样在Nuget中搜刮。

编写代码以下:

static void Main(string[] args)
{
    var consulClient = new ConsulClient(x => x.Address = new Uri($"http://192.168.1.178:8500"));//要求注册的 Consul 地点
    var ret = consulClient.Agent.Services();
     
    var allServer = ret.GetAwaiter().GetResult();
    //这个是个dictionary的返回值,他的key是string范例,就是8500/ui上services的instance的id
    var allServerDic = allServer.Response;
    var test1 = allServerDic.First();
    string name = test1.Value.Service;//效劳名,就是注册的谁人test1
    string serverAddress = test1.Value.Address; 
    int serverPort = test1.Value.Port;
    Console.WriteLine($"serverAddress:{serverAddress}==serverPort{serverPort}");
    //我们能够在客户端启动的时刻,挪用一下consul来查找效劳
    //比方,我们能够在效劳鸠合里查找 效劳名叫test1的效劳 然后在挪用它
    //如许,当效劳器改变了test1的ip和端口,我们依旧能够在集群里找他test1新的ip和端口了
    Console.ReadKey();
}

运转效果以下:

C#运用Consul集群举行效劳注册与发明_服务器,腾讯云

能够看到,我们已胜利挪用了Consul,也胜利的猎取到了效劳信息。 

----------------------------------------------------------------------------------------------------

实在Consul除了效劳注册与查询,还能够举行Key-Value存储,也就是说,这个是一个分布式Key-Value存储集群。

Key-Value存储的用法在Github已有例子了,网址:https://github.com/PlayFab/consuldotnet

----------------------------------------------------------------------------------------------------

C#运用Consul举行效劳注册与发明就讲完了。

代码已传到Github上了,迎接人人下载。

Github地点:https://github.com/kiba518/KibaConsul

----------------------------------------------------------------------------------------------------

注:此文章为原创,任何情势的转载都请联络作者取得受权并说明出处!
若您以为这篇文章还不错,请点击下方的引荐】,异常感谢!

https://www.cnblogs.com/kiba/p/11703073.html

 C#运用Consul集群举行效劳注册与发明_服务器,腾讯云

 

腾讯云双十一活动