.NET CORE微服务中CONSUL的相关使用
.NET CORE微服务中CONSUL的相关使用
1.consul在微服务中的作用
consul主要做三件事:1.提供服务到ip的注册
2.提供ip到服务地址的列表查询
3.对提供服务方做健康检查(定时调用服务方一个用于健康检查的api接口 告诉消费方,服务方的服务是否还存在)
2.consul的下载及安装
1.consul的下载地址 www..consul.io
2.consul的安装 consul agent -dev 开发环境测试,在生产环境中要建立集群
3.consul的监控页面 http://127.0.0.1:8500
3.相关代码
新建一个Asp.net core Web应用程序,选择Web API,名称为MsgService

1.rest服务的准备
在Controller文件夹中 新建一个控制器ValueController ,rest服务的准备
namespace MsgService.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
[HttpGet("{id}")]
public ActionResult<string> Get(int id)
{
return "value";
}
// POST api/values
[HttpPost]
public void Post([FromBody] string value)
{
}
// PUT api/values/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
}
// DELETE api/values/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
}
再创建一个
namespace MsgService.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class SMSController : ControllerBase
{
//发请求,报文体为{phoneNum:"110",msg:"aaaaaaaaaaaaa"},
[HttpPost(nameof(Send_MI))]
public void Send_MI(dynamic model)
{
Console.WriteLine($"通过小米短信接口向{model.phoneNum}发送短信{model.msg}");
}
[HttpPost(nameof(Send_LX))]
public void Send_LX(SendSMSRequest model)
{
Console.WriteLine($"通过联想短信接口向{model.PhoneNum}发送短信{model.Msg}");
}
[HttpPost(nameof(Send_HW))]
public void Send_HW(SendSMSRequest model)
{
Console.WriteLine($"通过华为短信接口向{model.PhoneNum}发送短信{model.Msg}");
}
}
public class SendSMSRequest
{
public string PhoneNum { get; set; }
public string Msg { get; set; }
}
}
.net core连接consul install-package consul
2.服务的治理(服务的注册 注销 健康检查)
在新创建的Web API程序的Startup.cs中完成服务的注册
public void Configure(IApplicationBuilder app,IHostEnvironment env,IApplicationLifetime applicationTime)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
string ip = Configuration["ip"];//获取服务的ip地址
string port = Configuration["port"];//获取服务的端口号
string serviceName = "MsgService";//服务的名称
string serviceId = serviceName +Guid().NewGuid();//服务的ID 必须保证每一个服务的id是不一样的
//consul的本地默认的ip及端口号为http://127.0.0.1:8500 可以自己进行设置
using(var consulClient = new ConsulClient(a=>{a.Address = new Uri("http://127.0.0.1:8500";a.DataCenter="dic1";)})){
AgentServiceRegistration asr = new AgentServiceRegistration();//创建一个服务代理的注册者
asr.Address = ip;
asr.Port = port;
asr.ID = serviceId;
asr.Name = serviceName;
asr.Check = new AgentServiceCheck(){ //设置健康检查间隔时间以及检查地址
DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//
HTTP = $"http://{ip}:{port}/api/Health",
Interval = TimeSpan.FromSeconds(10),
TimeOut = TimeSpan.FromSeconds(5)
};
//这是一个异步方法
consulClient.Agent.ServiceRegister(asr).wait();
}
//注销服务
applicationTime.ApplicationStopped.Register(()=>{
using(var consulClient = new ConsulClient(a=>a.Address = new Uri("http://127.0.0.1:8500")))
{
//通过服务的Id完成服务的销毁
consulClient.Agent.ServiceDeregister(serviceId).wait();
}
})
}
3.服务的发现
编写服务消费者
创建一个.net core控制台程序或者web应用程序 ,在startup.cs中
app.run(async(context)=>{
using(var consulClient= new ConsulClient(a=>a.Address=new Uri("http://127.0.0.1:8500"))){
//客户端负载均衡
var services = consulClient.Agent.Services().Result.Response.Values.Where(a=>a.Service.Equals("MsgService"));//找到服务名称为MsgService的服务
//通过随机数获取一个随机索引 去除索引为生成的随机数的服务
Random r = new Random();
int index = r.Next(service.Count());
var service = services.ElementAt(index);
await context.Response.WriteAsync($"id={service.ID},name={service.Service},ip={service.Address},port={service.Port}");
//服务
using(HttpClient http = new HttpClient())
using(var httpContent = new StringContent("{phoneNum:'119',msg:'help'}", Encoding.UTF8, "application/json")){
var http.PostAsync($"http://{service.Address}:{service.Port}/api/SMS/Send_LX", httpContent).Result;
await context.Response.WriteAsync(result.StatusCode.ToString());
}
}
})
.NET CORE微服务中CONSUL的相关使用的更多相关文章
- 基于.net core微服务(Consul、Ocelot、Docker、App.Metrics+InfluxDB+Grafana、Exceptionless、数据一致性、Jenkins)
1.微服务简介 一种架构模式,提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(RESTfu ...
- (3).NET CORE微服务 Micro-Service ---- Consul服务治理
Consul是注册中心,服务提供者.服务提供者.服务消费者等都要注册到Consul中,这样就可以实现服务提供者.服务消费者的隔离. 除了Consul之外,还有Eureka.Zookeeper等类似软件 ...
- (3)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- Consul服务治理
Consul是注册中心,服务提供者.服务提供者.服务消费者等都要注册到Consul中,这样就可以实现服务提供者.服务消费者的隔离. 除了Consul之外,还有Eureka.Zookeeper等类似软件 ...
- (4).NET CORE微服务 Micro-Service ---- Consul服务发现和消费
上一章说了 Consul服务注册 现在我要连接上Consul里面的服务 请求它们的API接口 应该怎么做呢? 1.找Consul要一台你需要的服务器 1.1 获取Consul下的所有注册的服务 u ...
- (4)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- Consul服务发现和消费
上一章说了 Consul服务注册 现在我要连接上Consul里面的服务 请求它们的API接口 应该怎么做呢? 1.找Consul要一台你需要的服务器 1.1 获取Consul下的所有注册的服务 u ...
- .NET Core微服务之基于Consul实现服务治理
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.Consul基础介绍 Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其他分布式服务注册与发 ...
- .NET Core微服务之基于Consul实现服务治理(续)
Tip: 此篇已加入.NET Core微服务基础系列文章索引 上一篇发布之后,很多人点赞和评论,不胜惶恐,这一篇把上一篇没有弄到的东西补一下,也算是给各位前来询问的朋友的一些回复吧. 一.Consul ...
- ASP.NET Core 微服务初探[1]:服务发现之Consul
ASP.NET Core 微服务初探[1]:服务发现之Consul 在传统单体架构中,由于应用动态性不强,不会频繁的更新和发布,也不会进行自动伸缩,我们通常将所有的服务地址都直接写在项目的配置文件 ...
- 微服务中的健康监测以及其在ASP.NET Core服务中实现运行状况检查
1 .什么是健康检查? 健康检查几乎就是名称暗示的.它是一种检查您的应用程序是否健康的方法.随着越来越多的应用程序转向微服务式架构,健康检查变得尤其重要(Health Check).虽然微服务架构有很 ...
随机推荐
- 初探WebAssembly
1.前言 参加完2018年上海的QCon大会,想到了会议中来自Microsoft的朱力旻大佬讲的WebAssembly,感触颇深. 我之前完全没有了解过WebAssembly,之前没有了解的原因也很简 ...
- scrapy pipelines导出各种格式
scrapy在使用pipelines的时候,我们经常导出csv,json.jsonlines等等格式.每次都需要写一个类去导出,很麻烦. 这里我整理一个pipeline文件,支持多种格式的. # -* ...
- curl 错误总结
证书域名与访问的域名不一致 问题:curl SSL: certificate subject name 'luffichen_server.tencent.com' does not match ta ...
- 我是这样理解HTTP和HTTPS区别的
为何要用https? http协议的缺点 通信使用明文,内容可能被窃听(重要密码泄露) 不验证通信方身份,有可能遭遇伪装(跨站点请求伪造) 无法证明报文的完整性,有可能已遭篡改(运营商劫持) 用htt ...
- Centos 7.0 zabbix 部署
1.LAMP 环境搭建 初次安装可以先关闭selinux 和 firewall [root@localhost ~]# setenforce [root@localhost ~]# systemctl ...
- EF 的 CURD 操作
EF 的 CURD 操作 这里采用了数据库 Northwind,下载地址:https://northwinddatabase.codeplex.com/ 增 /// <summary> / ...
- Django学习之五:Django 之 注意事项及汇总
目录 Django 之 注意事项及汇总 全局 settings model模块-模型模块 URLs模块 Templates System 模版模块 View/HttpRequest/HttpRespo ...
- jQuery.Ajax IE8,9 无效(CORS跨域)
今天在开发网站的时候,发现一个问题,$.ajax()在 IE8,9 浏览器不起作用,但 Chrome,Firefox ,360,IE10以上等浏览器却是可以的,网上资料很多,查询最后发现是 IE8,9 ...
- 2019年10个最受欢迎的JavaScript动画库!
摘要: 非常炫酷的动画库! 原文:值得看看,2019 年 11 个受欢迎的 JavaScript 动画库! 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 1. Three.js 超过 ...
- arcgis api 3.x for js 共享干货系列之一自写算法实现地图量算工具(附源码下载)
0.内容概览 Geometry 地图服务方式实现地图距离以及面积的量算,简单描述 arcgis api 提供的接口类 geometryEngine 实现地图距离以及面积的量算,简单描述 自定义距离以及 ...