基本介绍:

安装:

下载地址: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. C# 指定索引排序 (原)

    private void test(string[] sortkey_list, string[] list_temp) { //打开excel到dt: " }; string[] roww ...

  2. node.js入门学习(三)--npm

    一.npm介绍 1)npm:node package manager是node.js默认的以js编写的软件包管理系统 官网:www.npmjs.com 文档:docs.npmjs.com 2)提到np ...

  3. node.js入门学习(一)环境安装,REPL,fs模块,path模块,http模块

    一.node.js介绍 1.1.node.js是什么 官网首页总结:Node.js® 是一个基于 Chrome V8 引擎 的 JavaScript 运行时. 1)node.js是一个开发平台,就像j ...

  4. UVa 213 信息解码 (模拟 && 二进制)

    题意 :对于下面这个字符串 0,00,01,10,000,001,010,011……. 首先是长度为1的串,然后是长度为2的串,以此类推.不存在全为1的串. 你的任务是编写一个程序.首先输入一个代码头 ...

  5. Spring Boot教程(二十二)使用Swagger2构建强大的RESTful API文档(1)

    由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这 ...

  6. linux下vsftpd的安装及配置使用详细步骤(推荐)

    vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点. vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux.BS ...

  7. 1、VMware安装步骤

    最后重启电脑

  8. Jmeter之插件安装

    在实际工作中,会用到一些额外的jmeter插件,现在描述其插件的安装. 一.下载plugins-manager.jar 在官网中下载plugins-manger.jar,方便后续其他插件的安装,下载地 ...

  9. 中国MOOC_零基础学Java语言_第5周 数组_1多项式加法

    第5周编程题 查看帮助 返回   第5周编程题 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截 ...

  10. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'jeewx.weixin_account_user_relation' doesn't exist

    [INFO] Scanning for projects...[INFO] [INFO] ------------------------------------------------------- ...