.Net Core微服务——服务发现:Consul(一)
先思考一些问题:它是做什么的、以及怎么使用它。带着这些问题往下走。
consul是做什么的
consul用于微服务下的服务治理。服务治理是什么?它包含但不限于:服务发现、服务配置、健康检查、键值存储、安全服务通信、多数据中心等。
为什么需要服务治理?举个例子:最开始的服务比较简单,各服务之间通过API就能访问。后面业务复杂了,服务也跟着复杂了,搞分布式了,而分布式又必然是多服务器部署,这就有一个问题:如果服务之间还是用API访问,那某个服务所在的服务器挂掉以后这个服务就不能用了,也不能自动转移,那么只能人肉运维了。这时候大家在想:如果下游调用上游,只需要一个统一的地址,不用关注负载均衡、节点失效之类的问题,也不用关注可用性,这些都有一个中间件来完成,那该有多好。这个中间件要做的事情,就是服务治理,也就是本文的consul,它就是解决这个事的。但其实也不是只有它能做这个事,zooKeeper、etcd也能做这个事,也没有什么高下之分,用什么主要看自己,看公司。对自己来说,哪个摸得透、玩的熟就用哪个。对公司来说,哪个市场认可度高就用哪个,说白了就是哪个用的人多。用的人多会的人就多,招人换人速度就快了,互联网企业追求的不就是速度么?“时间就是金钱,效率就是生命”,这句话早期在深圳随处可见,至今仍然适用。
题外话有点多,接着往下走。
怎么使用consul
这里只讲docker内的consul。首先下载一个镜像:
dokcer pull consul
然后运行起来:
docker run -itd -p 8700:8500 --name myconsuldemo consul
成功运行后能看到如下页面:

tips:consul的默认端口是8500,docker启动可以映射到任意端口。
服务注册
服务发现的概念,简单来说就是所有节点程序启动时都去consul注册一下,注册后的信息统一保存在consul中以供调用。是不是很简单?
现在net core 3.1下完成consul服务注册。
首先需要添加nuget包:

然后自行封装一个注册服务,节省时间先上源码:
public static void Reg(IConfiguration configuration)
{
string ip = configuration.GetSection("ip").ToString(); string port = configuration.GetSection("port").ToString(); string weight = configuration.GetSection("weight").ToString(); string address = configuration.GetSection("address").ToString();//consul的地址 string center = configuration.GetSection("center").ToString();//consul的数据中心名称
//实例化一个客户端,配置地址、数据中心名称,完成连接
ConsulClient client = new ConsulClient(x =>
{
x.Address = new Uri(address);
x.Datacenter = center;
}); client.Agent.ServiceRegister(new AgentServiceRegistration()
{
ID = $"server {ip}:{port}",
Name = "shenzhen-ma",//分组名称
Address = ip,
Port = int.Parse(port)
});
}
配置文件:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ip": "127.0.0.1",
"port": 5100,
"weight": 1,//权重,负载均衡的重要参数
"address": "http://127.0.0.1:8700",//consul地址
"center": "dc1"//数据中心
}
最后,这个服务需要在程序启动的时候调用,只一次就好。直接把调用放在startup里就好,这样程序启动的时候就会自动注册一个服务。
为了能够动态修改配置文件,接下来通过控制台启动程序:
dotnet run --urls="http://*:5000" --ip="127.0.0.1" --port=5000
启动成功以后,转到consul的ui看一下:

能看到多了一个分组【shenzhen-ma】,点进去看下我们的服务:

127.0.0.1:5000,没毛病。这时候模拟一下多节点,再多启动两个程序试试看:

5001,5002也自动注册进入了这个分组。
因为时间关系,今天只能写到这里了,还有很多东西没有写,服务调用、健康检查什么的,我会尽快再发文的。
.Net Core微服务——服务发现:Consul(一)的更多相关文章
- 服务注册发现consul之二:在Spring Cloud中使用Consul实现服务的注册和发现
首先安装consul环境,参照之前的文章:<服务注册发现consul之一:consul介绍及安装>中的第一节介绍. Spring Cloud使用Consul的服务与发现 1.导入依赖pri ...
- 服务注册发现consul之一:consul介绍、安装、及功能介绍
Consul 是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发.它具有很多优点.包括:基于 raft 协议,比较简洁: 支持健康检查, 同时支持 HTTP 和 ...
- 服务注册发现consul之五:Consul移除失效服务的正确姿势
spring cloud微服务不定期会出现网络请求失败的错误.于是看了下后台日志,发现有几个请求会报如下的异常: Caused by: feign.RetryableException: Connec ...
- 服务注册发现consul之三:服务发现比较:Consul vs Zookeeper vs Etcd vs Eureka
这里就平时经常用到的服务发现的产品进行下特性的对比,首先看下结论: Feature Consul zookeeper etcd euerka 服务健康检查 服务状态,内存,硬盘等 (弱)长连接,kee ...
- 服务注册发现consul之四: 分布式锁之四:基于Consul的KV存储和分布式信号量实现分布式锁
一.基于key/value实现 我们在构建分布式系统的时候,经常需要控制对共享资源的互斥访问.这个时候我们就涉及到分布式锁(也称为全局锁)的实现,基于目前的各种工具,我们已经有了大量的实现方式,比如: ...
- Asp.Net Core微服务再体验
ASP.Net Core的基本配置 .在VS中调试的时候有很多修改Web应用运行端口的方法.但是在开发.调试微服务应用的时候可能需要同时在不同端口上开启多个服务器的实例,因此下面主要看看如何通过命令行 ...
- ASP.NET Core 微服务初探[1]:服务发现之Consul
ASP.NET Core 微服务初探[1]:服务发现之Consul 在传统单体架构中,由于应用动态性不强,不会频繁的更新和发布,也不会进行自动伸缩,我们通常将所有的服务地址都直接写在项目的配置文件 ...
- .NET Core微服务之基于Consul实现服务治理
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.Consul基础介绍 Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其他分布式服务注册与发 ...
- .NET Core微服务之基于Consul实现服务治理(续)
Tip: 此篇已加入.NET Core微服务基础系列文章索引 上一篇发布之后,很多人点赞和评论,不胜惶恐,这一篇把上一篇没有弄到的东西补一下,也算是给各位前来询问的朋友的一些回复吧. 一.Consul ...
随机推荐
- 基于 BDD 理论的 Nebula 集成测试框架重构(上篇)
本文首发于 Nebula Graph 公众号 NebulaGraphCommunity,Follow 看大厂图数据库技术实践. 测试框架的演进 截止目前为止,在 Nebula Graph 的开发过程中 ...
- GO学习-(25) Go操作Redis实战
Go操作Redis实战 安装Redis客户端 Go语言中使用第三方库https://github.com/go-redis/redis连接Redis数据库并进行操作.使用以下命令下载并安装: go ...
- Error attempting to get column from result set
当使用mybatis plus3.2.0+springboot2.1.1 报错 Error attempting to get column from result set 1.一般出现这种问题,最简 ...
- CAP 5.1 版本发布通告 - 你期待的 Redis 来了
前言 今天,我们很高兴宣布 CAP 发布 5.1 版本正式版,在这个版本里我们同样引入了更多令人激动的新特性和改进,同时也得到越来越多人的喜爱. 得益于社区的反馈和贡献者的支持,在过去的两个月里,我们 ...
- visudo
修改sudo配置 sudo visudo 上面的意思是执行visudo这个命令, visudo其实就是用vi编辑器来编辑/etc/sudoers, 这个文件只能通过visudo来修改 或者在/etc/ ...
- .NET平台系列18 .NET5的超强优势
系列目录 [已更新最新开发文章,点击查看详细] 支持所有 .NET 应用程序类型 .NET5 统一版本之后将支持所有 .NET 应用程序类型:Xamarin.ASP.NET.IoT 和桌面.此 ...
- python工业互联网应用实战18—前后端分离模式之jquery vs vue
前面我们分三章来说明了使用django template与jquery的差别,通过jquery如何来实现前后端的分离,同时再9章节使用vue.js 我们浅尝辄止的介绍了JQuery到vue的切换,由于 ...
- application/octet-stream二进制流, springboot项目, postman 测试参数设置
这里使用 原生String接受,之后解析,
- fiddler选项卡-Statistc(统计)
Statistc Statistc是fiddler用来对session列表里的Session相关情况的统计,利用这个选项,可以对请求进行性能以及其他数据分析 1.界面 2.参数详解 建议:打开fidd ...
- 小Z的袜子(hose) &&作业 (莫队)
莫队:一种非常优雅的暴力,时间复杂度一般情况下是n*根号n,还是很优秀的. 今天水了三道莫队题,对普通莫队有了些了解 1.莫队l和r为指针,维护当前区间的某些信息,一般可以是当前区间不同权值的个数,( ...