在开发互联网项目中,需要各项服务之间进行数据交互、用户从服务器中获取数据,服务接口高可用显得尤为重要,尤其在电商、支付系统中,高可用也衡量着系统是否健壮。集群的情况下,众多的服务也难以维护。
Consul 回顾
Consul 是HashiCorp公司推出的使用go语言开发的开源工具,用于实现分布式系统的服务发现与配置,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,使用起来较为简单。
Consul 服务发现
Consul服务发现的使用方法:
- 在每台电脑上都以Client Mode的方式运行一个Consul代理, 这个代理只负责与Consul Cluster高效地交换最新注册信息(不参与Leader的选举)
- 每台电脑上的服务Service都向本机的consul代理注册 服务名称和提供服务的url
- 当Computer1上部署的程序ServiceA需要调用服务ServiceB时, 程序ServiceA直接从本机的Consul Agent通过服务名称获取ServiceB的访问地址, 然后直接向ServiceB的url发出请求。
代码如下:
在 Startup 类中调用如下:
健康检查
consul 需要向服务定时发送请求,确保服务在正常运行状态,健康检查接口只需要向 consul 返回 200 状态码即可,代码如下:
启动项目,注册服务
控制器随便定义一个 test 方法,如下:
我们进入到项目的bin目录下面,通过命令行启动,代码如下:
通过浏览器查看链接:
http://127.0.0.1:8500/ui/dc1/services/test.itsvse
http://127.0.0.1:8500/v1/catalog/service/test.itsvse
json数据如下:
[
{
"ID": "bb644359-6b2a-a27e-7a0a-a1950b8e515f",
"Node": "DESKTOP-EB7B69D",
"Address": "127.0.0.1",
"Datacenter": "dc1",
"TaggedAddresses": {
"lan": "127.0.0.1",
"wan": "127.0.0.1"
},
"NodeMeta": {
"consul-network-segment": ""
},
"ServiceKind": "",
"ServiceID": "507338bf-a5a6-4013-9675-c43a40a2c1a0",
"ServiceName": "test.itsvse",
"ServiceTags": [
"test",
"itsvse"
],
"ServiceAddress": "127.0.0.1",
"ServiceWeights": {
"Passing": 1,
"Warning": 1
},
"ServiceMeta": {},
"ServicePort": 8083,
"ServiceEnableTagOverride": false,
"ServiceProxy": {
"MeshGateway": {},
"Expose": {}
},
"ServiceConnect": {},
"CreateIndex": 1317,
"ModifyIndex": 1317
},
{
"ID": "bb644359-6b2a-a27e-7a0a-a1950b8e515f",
"Node": "DESKTOP-EB7B69D",
"Address": "127.0.0.1",
"Datacenter": "dc1",
"TaggedAddresses": {
"lan": "127.0.0.1",
"wan": "127.0.0.1"
},
"NodeMeta": {
"consul-network-segment": ""
},
"ServiceKind": "",
"ServiceID": "bb21f150-7219-4eda-bc91-54686a750228",
"ServiceName": "test.itsvse",
"ServiceTags": [
"test",
"itsvse"
],
"ServiceAddress": "127.0.0.1",
"ServiceWeights": {
"Passing": 1,
"Warning": 1
},
"ServiceMeta": {},
"ServicePort": 8082,
"ServiceEnableTagOverride": false,
"ServiceProxy": {
"MeshGateway": {},
"Expose": {}
},
"ServiceConnect": {},
"CreateIndex": 1314,
"ModifyIndex": 1314
}
]
Consul 服务调用
新建一个 .net core 控制台项目,代码如下:
我是随机调用注册的 test.itsvse 服务,执行结果如下:
最后,源码下载:
|