NetCore快速上手的方法
互联网热潮下,“微服务”技术架构成为了一种高大上的技术,其顾名思义就是将传统的大的业务服务拆分成独立的小服务,当拆分的服务慢慢多起来的时候,我们会发现服务地址很难管理,传统的方式一般会通过配置文件或者数据库存储,这种手动的维护的方式显然不够灵活,如果某个服务挂了,系统得不到及时的通知,只能等维护人员处理。这个时候如果有个中间件来做服务发现的话,显然会显得很灵活。
.net平台上使用“微服务”时做服务发现,目前来说cosul是一个不错的选择。
什么是consul
consul是一种提供了服务发现,配置管理等功能的服务网格解决方案,是一种分布式,高可用的服务管理架构。
主要功能:
服务发现(service discovery):consul提供了通过dns或者http api接口的方式来发现服务。服务与服务之间通过consul中心来统一获取调用服务的地址,而不再是传统模式下服务之间调用的“硬编码”配置管理。
服务注册(service register):consul提供了两种方式进行服务注册。第一种通过http api的方式在服务启动时注册,第二种通过json配置文件的方式注册。
健康检查(health checking):一旦服务注册到consul的client节点下,consul就会根据服务注册时配置的间隔时间,主动请求服务,以获取服务的健康状态,如发现不健康的服务,则将该服务从consul中注销。
key/value存储:应用程序可以根据自己的需要使用consul提供的key/value存储。 consul提供了简单易用的http接口,结合其他工具可以实现动态配置、功能标记、领袖选举等等功能。
一张图简单了解下consul

client节点
client表示consul的client模式,即客户端模式。
1)client节点负责转发请求给server节点,本身不持久化任何信息
2)提供服务健康检查
3)client节点支持任意扩展,数量不受限制。
server 节点
server表示consul的server模式,即服务端模式。
1)server节点接收client的转发请求,并本地持久化这些信息,遇到故障后方便排查。
2)consul集群中至少有一个server,官方建议server节点的个数3个或者5个比较合适(集群管理)。server的集群解决了单点问题,server间需要选举一个ledger,由server-ledger负责server集群之间的信息同步。
3)采用raft一致性协议,保证server节点之间数据一致
consul节点间通信
consul使用gossip协议管理成员关系、广播消息到整个集群,包括两个gossip pool(lan pool和wan pool),lan pool是同一个数据中心内部通信的,wan pool是多个数据中心之间通信的,lan pool有多个,wan pool只有一个。
通过上图我们会发现,consul推荐是以集群的形式部署。但是很多人刚开始接触学习的时候并没有那么多机器模拟(docker模拟咱先不讨论了),server单节点模式是否可行呢?
答案当然是可行的,但弊端也显而易见,首先肯定会有单点故障问题,其次如果注册的服务太多,server需要不断的向服务发送请求,进行健康检查,显然大量、高频次的请求会极大影响consul节点。
如果只有一个server节点,那么实际上它自身即充当了client又充当了server。本文我们就以server单节点的模式,以最简单的应用和大家学习一下如何在.netcore中使用consul。
准备环境.netcore3.1 、consul部署包
首先下载consul,官方地址:
https://www.consul.io/downloads,解压我们会发现就是一个exe程序,掌握一些常用的cmd命令即可。
本地环境consul启动cmd命令:
首先cd到consul.exe所在目录目录
然后输入consul agent -server -bootstrap-expect=1 -node=service1 -bind=127.0.0.1 -data-dir=./data -client=0.0.0.0 -ui -config-dir=./config
常用参数说明:
-server:表示consul代理模式,有两个选择-server和-client
-bootstrap-expect:在一个数据中心中期望提供的server节点数量,只有等到指定数量的server全部启动后,才会启动集群(自行选举ledger)
-node:集群中节点名称,同一集群中唯一,默认为主机名
-bind:绑定集群内部通信的地址,表示该节点监听的地址,这个地址必须是集群内部所有节点可达的。默认是0.0.0.0(将绑定机器得所有地址,同时把 ipv4地址告诉集群得其他人)
-client:绑定客户端的ip地址,默认127.0.0.1,可绑定多个。0.0.0.0表示谁都可以访问。
-data-dir:用于存放agent状态的目录
-ui:启用web ui
-config-dir:配置目录,将加载目录中的 .hcl 或 .json 格式配置。 注意子路径不会加载
启动consul后,我们可以通过http://localhost:8500访问consuld的ui页面

http方式注册.netcore服务
新建api项目(服务a)

nuget添加consul依赖包

添加consul参数配置


注册服务


consul服务注册具体实现逻辑


1)使用ioptions管理配置类consuloptions,将配置文件(比如appsettings.json)中的配置反序列化至配置类的实例中
2)agentserviceregistration代理服务注册类,实例化注册服务配置。
健康检查接口


consul节点会根据配置的间隔时间进行定期请求改健康检查接口,获取服务健康状态。
服务启动
查看consul ui页面我们会发现我们注册的服务webapi1信息已显示

那么如何做到服务发现呢?
通常情况下,如果服务b调用服务a,需要在服务b中配置并指向服务a的地址,也就是上面说的“硬编码”的配置方式,这种模式下,如果服务a部署了多个,那么就需要管理多个地址,并且服务b本身无法知道某个服务a挂掉就放弃请求。
而consul为我们提供了便利,现在服务b不用关心服务a具体的服务地址以及服务a是否健康。服务b直接请求consul服务地址,告诉它我要访问服务a,consul就会启动服务发现机制,找到所有已注册并且健康的服务a,然后根据选择其中的一个返回给服务b,然后服务b根据服务a具体的地址发起请求。consul帮我们管理了服务地址和服务健康检查。
下面我们就模拟一下consul的服务发现。
服务发现
新建api项目(服务b)

nuget添加consul依赖包

模拟服务发现


1)consulclient实例化consul服务节点
2)
consulclient.catalog.service(“服务名称”).result.response根据服务名称,获取conusl注册的所有服务地址信息(ip、端口)。
好了,本文主要是采用server单节点的模式,和大家介绍了一下consul的特性,以及结合.netcore做了服务注册和模拟了服务发现。
我相信,大家带着动手测试一遍,也会有所思考和收获。
以上就是NetCore快速上手的方法的全部内容,希望对您有帮助。内容来源于互联网,本站仅做分享以供参考。
- 上一篇:上海社保代缴一个月多少钱
- 下一篇:烙馅饼的面怎么和松软










