.Net?Core服务治理Consul使用服务发现
(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun)
先思考一些问题:它是做什么的、以及怎么使用它。带着这些问题往下走。
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").Value.ToString(); string port = configuration.GetSection("port").Value.ToString(); string weight = configuration.GetSection("weight").Value.ToString(); string address = configuration.GetSection("address").Value.ToString();//consul的启动地址 string center = configuration.GetSection("center").Value.ToString();//数据中心名称 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使用服务发现的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持程序员之家。
相关文章
找不到类型或命名空间名称“Server”(是否缺少 using 指令或程序集引用?)
找不到类型或命名空间名称“Server”(是否缺少 using 指令或程序集引用?)...2006-10-10在ASP.NET 2.0中操作数据之四十三:DataList和Repeater数据排序(二)
上篇已经介绍了DropDownList隐式使用ViewState,本文主要介绍详细介绍直接使用ViewState存储排序的条件,并配合上一页、下一页按钮,实现DataList和Repeater自定义排序的功能。2016-05-05在MacOS+Linux+Nginx中发布和部署Asp.Net?Core
这篇文章介绍了在MacOS+Linux+Nginx中发布和部署Asp.Net?Core,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-12-12.NET多种数据库大数据批量插入、更新(支持SqlServer、MySql、PgSql和Oracle)
这篇文章介绍了.NET多种数据库大数据批量插入、更新。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-11-11ASP.NET MVC Bundles 用法和说明(打包javascript和css)
本文主要介绍了ASP.NET MVC中的新功能Bundles,利用Bundles可以将javascript和css文件打包压缩,并且可以区分调试和非调试,在调试时不进行压缩,以原始方式显示出来,以方便查找问题。2016-04-04在ASP.NET 2.0中操作数据之三十九:在DataList的编辑界面里添加验证控件
为了防止用户非法的输入,这节主要介绍如何在编辑数据的时候添加验证控件,以避免出现异常和保证数据的完整性。2016-05-05ASP.NET 2.0中的数据操作之七:使用DropDownList过滤的主/从报表
本文主要介绍在ASP.NET 2.0中如何给DropDownList控件绑定数据源,并通过DropDownList所选的不同的值,筛选出不同的数据信息。2016-05-05解读ASP.NET 5 & MVC6系列教程(7):依赖注入
这篇文章主要介绍了ASP.NET 5 依赖注入,需要的朋友可以参考下2016-06-06在ASP.NET 2.0中操作数据之四十九:为GridView控件添加RadioButton
本文主要讲解ASP.NET 2.0为GridView的每一行添加RadioButton具体方法,并配合Literal控件实现单选的目的。2016-05-05
最新评论