dotnet core 3.1+consul 学习(1)
最近在学习微服务方面的知识,使用微服务当然少不了要有一个注册中心,注册中心的作用就是
1.解耦:服务消费者和服务提供者解耦,各自变化,不互相影响
2.扩展:服务消费者和服务提供者增加和删除新服务,对于双方都没任何影响
3.中介者模式:解决 多对多关系
注册中心有很多种:
1.zookeeper:一个被广泛使用的分布式的高性能服务(java开发的)
2.consul:一个发现和配置服务的工具,提供API注册和发现服务,为了确保操作性,consul会执行健康检查(go开发,不需要安装任何环境)
3.etcd:一个高可用,分布式的,一致性key-value结构,用于共享配置信息和服务发现K8s使用了etcd
Consul主要由三个概念:1.Server(提供存储服务) 2.client (操作Server) 3.agent(守护进程,所有server和client都要经过agent代理才能启动)
介绍完成,开始进入代码运用 怎么去注册和发现
1.cmd命令先启动一个服务端(要先去下载https://www.consul.io/)
consul agent -dev
这里用-dev是因为只是demo学习,一般线上都是不需要加-dev, 只是存储方式不同,其他功能没区别
2.创建一个webapi项目,NuGet引用Consul包
在Startup中添加以下代码
//1.0创建consul客户端连接 var consulClient=new ConsulClient(config => { config.Address=new Uri("http://127.0.0.1:8500");//服务端地址 }); //2.0创建consul服务注册对象 var registration=new AgentServiceRegistration() { ID=Guid.NewGuid().ToString(),//服务编号(必要,一般是guid,也可以用其他的) Name = "TestServer",//服务名称(必要,集群时候是核心) Address = "http://localhost",//服务地址(必要) Port = 5001,//端口(必要) Tags = null,//服务版本 Check = null,//健康检查,检查服务是否正常运行(需要) }; //3.0注册服务 consulClient.Agent.ServiceRegister(registration).Wait();
设置项目启动端口为5001,然后命令行启动项目
然后访问consul服务端地址,发现已经成功注册
发现服务code
//1.0创建连接 var consulClient = new ConsulClient(config => { //1.1 建立客户端和服务端连接 config.Address = new Uri("http://127.0.0.1:8500"); }); //2.0查询服务 var result = await consulClient.Catalog.Service("TestServer"); //3.0将服务进行拼接 var list = new List<string>(); foreach (var catalogService in result.Response) { //1、拼接连接地址 list.Add(catalogService.ServiceAddress+":"+catalogService.ServicePort); }
这个demo仅供入门学习,实际工作项目中,还包括健康检查,注册集群,动态注册等等