基本介绍:

安装:

下载地址:https://www.consul.io/downloads.html

运行:

consul agent -dev

显示这个界面说明已经开启成功。

页面显示:

然后访问8500端口就可以看到页面:

命令:

consul members:输出当前服务的信息,显示的所有配置节点。

install-package Consul:在vs项目中安装Consul

服务连接:

开启consul服务之后需要把现有的项目连接集群到consul服务,这时候需要在项目中注册服务(在startup.cs文件下的Configure方法):

 String ip = Configuration["ip"];//部署到不同服务器的时候不能写成127.0.0.1或者0.0.0.0,因为这是让服务消费者调用的地址
int port = int.Parse(Configuration["port"]);//获取服务端口
var client = new ConsulClient(ConfigurationOverview); //回调获取
var result = client.Agent.ServiceRegister(new AgentServiceRegistration()
{
ID = "ServerNameFirst" + Guid.NewGuid(),//服务编号保证不重复
Name = "MsgServer",//服务的名称
Address = ip,//服务ip地址
Port = port,//服务端口
Check = new AgentServiceCheck //健康检查
{
DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(),//服务启动多久后反注册
Interval = TimeSpan.FromSeconds(),//健康检查时间间隔,或者称为心跳间隔(定时检查服务是否健康)
HTTP = $"http://{ip}:{port}/api/Health",//健康检查地址
Timeout = TimeSpan.FromSeconds()//服务的注册时间
}
});

之后在增加一个回调方法:

回调方法是代表的consul服务的地址配置。

 private static void ConfigurationOverview(ConsulClientConfiguration obj)
{
//consul的地址
obj.Address = new Uri("http://127.0.0.1:8500");
//数据中心命名
obj.Datacenter = "dc1";
}

服务到这里已经是配置完毕。但是我们怎么注销服务哪。当然是有办法的拉。通过api我们可以知道ServiceDeregister方法是注销服务的方法。那么我们应该怎么写哪:

首先我们要去了解一下IApplicationLifetime接口:允许消费者在优雅关机期间执行清理工作

ApplicationStarted:当应用程序主机已完全启动并将要等待时触发

ApplicationStopping:当应用程序主机执行优美关机时触发。请求可能还在运行中。关闭将阻止此事件完成

ApplicationStopped:当应用程序主机执行关机时触发。所有请求应该在这一点完成。关机将阻止此事件完成。

好了,我的英语确实不好,这些就是自动翻译的意思。不过也能让我们明白大概的意思。知道有这个东西我们就可以实现功能了完整代码:

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime lifetime)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
        app.UseMvc();
String ip </span>= Configuration[<span style="color: #800000;">"</span><span style="color: #800000;">ip</span><span style="color: #800000;">"</span>];<span style="color: #008000;">//</span><span style="color: #008000;">部署到不同服务器的时候不能写成127.0.0.1或者0.0.0.0,因为这是让服务消费者调用的地址</span>
<span style="color: #0000ff;">int</span> port = <span style="color: #0000ff;">int</span>.Parse(Configuration[<span style="color: #800000;">"</span><span style="color: #800000;">port</span><span style="color: #800000;">"</span>]);<span style="color: #008000;">//</span><span style="color: #008000;">获取服务端口</span>
<span style="color: #0000ff;">var</span> client = <span style="color: #0000ff;">new</span> ConsulClient(ConfigurationOverview); <span style="color: #008000;">//</span><span style="color: #008000;">回调获取</span>
<span style="color: #0000ff;">string</span> serverId = <span style="color: #800000;">"</span><span style="color: #800000;">ServerNameFirst</span><span style="color: #800000;">"</span> +<span style="color: #000000;"> Guid.NewGuid(); </span><span style="color: #0000ff;">var</span> result = client.Agent.ServiceRegister(<span style="color: #0000ff;">new</span><span style="color: #000000;"> AgentServiceRegistration()
{
ID </span>= serverId,<span style="color: #008000;">//</span><span style="color: #008000;">服务编号保证不重复</span>
Name = <span style="color: #800000;">"</span><span style="color: #800000;">MsgServer</span><span style="color: #800000;">"</span>,<span style="color: #008000;">//</span><span style="color: #008000;">服务的名称</span>
Address = ip,<span style="color: #008000;">//</span><span style="color: #008000;">服务ip地址</span>
Port = port,<span style="color: #008000;">//</span><span style="color: #008000;">服务端口</span>
Check = <span style="color: #0000ff;">new</span> AgentServiceCheck <span style="color: #008000;">//</span><span style="color: #008000;">健康检查</span>

{

DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(),//服务启动多久后反注册

Interval = TimeSpan.FromSeconds(),//健康检查时间间隔,或者称为心跳间隔(定时检查服务是否健康)

HTTP = $"http://{ip}:{port}/api/Health",//健康检查地址

Timeout = TimeSpan.FromSeconds()//服务的注册时间

}

});

        lifetime.ApplicationStopping.Register(() </span>=&gt;<span style="color: #000000;">
{
Console.WriteLine(</span><span style="color: #800000;">"</span><span style="color: #800000;">注销方法</span><span style="color: #800000;">"</span><span style="color: #000000;">);
client.Agent.ServiceDeregister(serverId).Wait();</span><span style="color: #008000;">//</span><span style="color: #008000;">服务停止时取消注册</span>

});

}

运行效果截图:

客户端:

简单介绍一个获取服务所有地址,然后打印并从其中随机选取一个进行请求并打印:

       static List<string> Urls = new List<string>();
    </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> Main(<span style="color: #0000ff;">string</span><span style="color: #000000;">[] args)
{
Console.WriteLine(</span><span style="color: #800000;">"</span><span style="color: #800000;">开始输出当前所有服务地址</span><span style="color: #800000;">"</span><span style="color: #000000;">);
Catalog_Nodes().GetAwaiter().GetResult();
</span><span style="color: #008000;">//</span><span style="color: #008000;">Console.WriteLine(HelloConsul().GetAwaiter().GetResult());</span>
Console.WriteLine(<span style="color: #800000;">"</span><span style="color: #800000;">开始随机请求一个地址服务地址</span><span style="color: #800000;">"</span><span style="color: #000000;">);
</span><span style="color: #0000ff;">int</span> index = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Random().Next(Urls.Count);
</span><span style="color: #0000ff;">string</span> url =<span style="color: #000000;"> Urls[index];
</span><span style="color: #0000ff;">string</span> param = <span style="color: #800000;">""</span>;<span style="color: #008000;">//</span><span style="color: #008000;">这里是开始位置</span>
param += <span style="color: #800000;">"</span><span style="color: #800000;">{</span><span style="color: #800000;">"</span><span style="color: #000000;">;
param </span>+= <span style="color: #800000;">"</span><span style="color: #800000;">\"</span><span style="color: #800000;">"</span> + <span style="color: #800000;">"</span><span style="color: #800000;">id</span><span style="color: #800000;">"</span> + <span style="color: #800000;">"</span><span style="color: #800000;">\":\"</span><span style="color: #800000;">"</span> + <span style="color: #800080;">5</span> + <span style="color: #800000;">"</span><span style="color: #800000;">\",</span><span style="color: #800000;">"</span><span style="color: #000000;">;
param </span>= param.TrimEnd(<span style="color: #800000;">'</span><span style="color: #800000;">,</span><span style="color: #800000;">'</span><span style="color: #000000;">);
param </span>+= <span style="color: #800000;">"</span><span style="color: #800000;">}</span><span style="color: #800000;">"</span><span style="color: #000000;">;
Console.WriteLine(</span><span style="color: #800000;">"</span><span style="color: #800000;">请求的随机地址:</span><span style="color: #800000;">"</span> +<span style="color: #000000;"> url);
</span><span style="color: #0000ff;">string</span> result = HttpClientHelpClass.PostResponse(url, param, <span style="color: #0000ff;">out</span> <span style="color: #0000ff;">string</span><span style="color: #000000;"> statusCode);
Console.WriteLine(</span><span style="color: #800000;">"</span><span style="color: #800000;">返回状态:</span><span style="color: #800000;">"</span> +<span style="color: #000000;"> statusCode);
Console.WriteLine(</span><span style="color: #800000;">"</span><span style="color: #800000;">返回结果:</span><span style="color: #800000;">"</span> +<span style="color: #000000;"> result);
Console.ReadLine();
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">async</span><span style="color: #000000;"> Task Catalog_Nodes()
{
</span><span style="color: #0000ff;">var</span> client = <span style="color: #0000ff;">new</span><span style="color: #000000;"> ConsulClient();
</span><span style="color: #0000ff;">var</span> nodeList = <span style="color: #0000ff;">await</span><span style="color: #000000;"> client.Agent.Services();
</span><span style="color: #0000ff;">var</span> url =<span style="color: #000000;"> nodeList.Response.Values; </span><span style="color: #0000ff;">foreach</span> (<span style="color: #0000ff;">var</span> item <span style="color: #0000ff;">in</span><span style="color: #000000;"> url)
{
</span><span style="color: #0000ff;">string</span> Address =<span style="color: #000000;"> item.Address;
</span><span style="color: #0000ff;">int</span> port =<span style="color: #000000;"> item.Port;
</span><span style="color: #0000ff;">string</span> name =<span style="color: #000000;"> item.Service;
Console.WriteLine($</span><span style="color: #800000;">"</span><span style="color: #800000;">地址:{Address}:{port},name:{name}</span><span style="color: #800000;">"</span><span style="color: #000000;">);
Urls.Add($</span><span style="color: #800000;">"</span><span style="color: #800000;">http://{Address}:{port}/api/Test</span><span style="color: #800000;">"</span><span style="color: #000000;">);
}
}</span></pre>

系列章节:

微服务系列文章主要介绍微服务所使用到的一些技术和一些技术示例:

原文地址:https://www.cnblogs.com/yanbigfeg/p/9199590.html

Consul服务发现在windows下简单使用的更多相关文章

  1. 【微服务No.1】Consul服务发现在windows下简单使用

    基本介绍: 安装: 下载地址:https://www.consul.io/downloads.html 运行: consul agent -dev 显示这个界面说明已经开启成功. 页面显示: 然后访问 ...

  2. windows下简单的缓冲区溢出

    缓冲区溢出是什么? 当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被“撑爆”,从而覆盖了相邻内存区域的数据 成功修改内存数据,可造成进程劫持,执行恶意代码,获取服务器控制权等 ...

  3. windows下简单安装postgres

    目前版本是PostgreSQL 9.6,它经过以下平台认证: 32位Windows Windows 7,8和10 Windows 2008 Server 64位Windows Windows 7,8和 ...

  4. (一)Memcached初学教程之安装服务篇(Windows下)

    1.下载Memcached的Windows服务安装程序(备注:memcached官网:http://memcached.org/ ,没有提供windows下的安装包,只有UNIX下的安装包,我们这里用 ...

  5. CentOS7下rsync服务端与Windows下cwRsync客户端实现数据同步配置方法

    最近需求想定期备份服务器d盘的数据到Linux服务器上面,做个笔记顺便写下遇到的问题 以前整过一个win下的cwrsync(客户端)+rsync(服务端:存储)的bat脚本 和整过一个Linux下的r ...

  6. linux下启动mysql服务(类似于windows下net start mysql)

    1.linux系统启动方式:service mysql start.其类似于windows下net start mysql

  7. windows下简单验证码识别——完美验证码识别系统

    此文已由作者徐迪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 讲到验证码识别,大家第一个可能想到tesseract.诚然,对于OCR而言,tesseract确实很强大,自带 ...

  8. windows下简单配置squid反向代理服务器

    下载windwosNT版本的squid下载地址: http://squid.acmeconsulting.it/download/squid-2.6.STABLE13-bin.zip 1.把squid ...

  9. windows下简单配置apache

    不得不做个笔记,不然每次配置都记不清楚... 详细的配置朋友这边写的很好.地址 # 对 PHP 4 LoadModule php4_module "c:/php/php4apache2.dl ...

随机推荐

  1. 2018百度之星初赛B轮 p1m2

    p1m2 Accepts: 954 Submissions: 4063 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/1310 ...

  2. opengl中相关的计算机图形变换矩阵之:齐次坐标 (摘编)

    模型视图变换(几何变换)矩阵: 1. 齐次坐标:两条平行线也可以相交. 在欧几里得空间中,两条平行线是无法相交的,但是在投影空间(Projective Space)这条定理就不再适用了. 比如上图中, ...

  3. Spring Cloud Config教程(四)快速开始

    Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持.使用Config Server,您可以在所有环境中管理应用程序的外部属性.客户端和服务器上的概念映射与Spring ...

  4. 为Sublime Text 3设置优雅的字体

    本文使用的Sublime Text 3版本是3.2.1(build 3207),这个版本默认对中文的支持很糟糕,中国程序员很费眼睛,需要做一番设置. 首选需要在本机安装漂亮的字体,我们选用的是YaHe ...

  5. 快速排序和二分查找(Javascript)

    var data = [8, 3, 4, 1, 18, 22, 11, 3, 5, 6, 2, 1, 77] quickSort(data, 0, data.length - 1) console.l ...

  6. Make jQuery throw error when it doesn't match an element

    Make jQuery throw error when it doesn't match an element 解答1 You could make a plugin to use to ensur ...

  7. SpringMvc配置自定义视图

    1.在dispatcherServlet-servlet.xml配置自定义视图 <!-- 配置视图 BeanNameViewResolver 解析器: 使用视图的名字来解析视图 --> & ...

  8. ThreadLocal 源码分析

    线程局部变量 ThreadLocal 用于实现线程隔离和类间变量共享. 创建实例 /** * 当前 ThreadLocal 实例的哈希值 */ private final int threadLoca ...

  9. java dwg转svg

    package com.example.demo.dxf2svg; import com.aspose.cad.InterpolationMode; import com.aspose.cad.Smo ...

  10. linux使用ltrace和strace跟踪程序执行过程

    yum install strace yum install ltrace 1.strace  ping -c 1 www.baidu.com 2.ltrace  ping -c 1 www.baid ...