前言:简单介绍微服务中服务注册与发现的配置使用
一,微服务中的服务注册与发现
分布式微服务架构中一个应用可能由一组职责单一化的服务组成, 所以服务需要一个统一的管理中间件,往上可以为方便服务之间的调用,往下可以便于服务的水平扩展以及服务状态的管理。
服务的注册:为每一个服务实例提供注册的服务组件(比如zookeeperconsul),为服务发现提供可用服务的目录
服务的发现:服务模块能够被其他调用及时发现
二,微服务中的Consul
1,什么是Consul
Consul 是HashiCorp公司推出的开源工具,由Go语言开发的服务网格解决方案,提供具有服务发现、配置和分段功能的全功能控制平面
2,Consul的特点
服务发现:Consul 的客户端可以注册一个服务,例如 api或mysql,其他客户端可以使用 Consul 来发现给定服务的提供者。使用 DNS 或 HTTP,应用程序可以轻松找到它们所依赖的服务。
健康检查:Consul 客户端可以提供任意数量的健康检查,要么与给定的服务相关联(“网络服务器是否返回 200 OK”),要么与本地节点(“存 利 用 率 低 于 90%”)相关联。操作员可以使用此信息来监视集群健
康状况,并且服务发现组件可以使用它来将流量从不健的主 机 路由 出 去。
KV 存储:应用程序可以将 Consul 的分层键/值存储用于多种目的,包括动态配置、功能标记、协调、领导选举等。简单的 HTTP API 使其易于使 用。
安全服务通信:Consul 可以为服务生成和分发 TLS 证书,以建立相互的 TLS 连接。 意图 可用于定义允许哪些服务进行通信。可以通过实时更 意 图 轻 松 管 理 服 务 分段,而不是使用复杂的网络拓扑和静态防火墙规则。
多数据中心:Consul 支持开箱即用的多个数据中心。这意味着 Consul 的用户不必担心构建额外的抽象层以扩展到多个区域。
三,Consul的简单使用
1,安装:直接在官网下载解压即可 (Consul官网:https://www.consul.io/)
2,运行 在consul.exe目录下打开命令行执行 consul.exe agent -dev,然后浏览器访问:http://localhost:8500/
3,项目中使用:
(1)首先Nuget安装一下Consul:
(2)添加注册配置:
、 ConsulSetHelper:
public static IApplicationBuilder RegisterConsul(this IApplicationBuilder app, IHostApplicationLifetime lifetime)
{
var list = ConsulSetting.List();
if (list != null && list.Count > 0)
{
foreach (var item in list)
{
var consulClient = new ConsulClient(c =>
{
//consul地址
c.Address = new Uri(item.ConsulAddress);
});
var registration = new AgentServiceRegistration()
{
ID = item.ID,//服务实例唯一标识
Name = item.ServiceName,//服务名
Address = item.ServiceIP, //服务IP
Port = item.ServicePort,//服务端口
Check = new AgentServiceCheck()
{
DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服务启动多久后注册
Interval = TimeSpan.FromSeconds(10),//健康检查时间间隔
HTTP = $"http://{item.ServiceIP}:{item.ServicePort}{item.ServiceHealthCheck}",//健康检查地址
Timeout = TimeSpan.FromSeconds(5)//超时时间
}
};
//服务注册
consulClient.Agent.ServiceRegister(registration).Wait();
//应用程序终止时,取消注册
lifetime.ApplicationStopping.Register(() =>
{
consulClient.Agent.ServiceDeregister(registration.ID).Wait();
});
}
}
return app;
}
服务注册就是把服务的基础信息插入到consul中,同一集群的服务建议使用相同的Name
Startup:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime lifetime)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
//服务注册与发现
app.RegisterConsul(lifetime);
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync("Hello World!");
});
});
}
运行效果:
到这个界面就说明服务已经注册成功,其中consul 是系统默认的实例,OrderService(单机)和ProductService(集群) 为测试实例
4,consul服务监听--Watches
低故障率高可用的系统都不离不开一个及时的健康监控,consul 不仅提供了服务注册与发现、安全服务通信、多数据中心等功能,还有Watches机制,
添加一个server.json配置文件
{
"watches": [
{
"type": "checks",//监听类型
"state": "critical",//监控服务的状态值:Passing,Warning,Critical
"handler_type": "http",
"http_handler_config": {
"path": "http://localhost:6001/home/get",//通知路径
"method": "get",//通知请求类型
"header": {
"x-foo": [ "XX", "XX" ]
},
"timeout": "10s",
"tls_skip_verify": true
}
}
]
}
Watches支持如下类型:
- Key – 监视指定K/V键值对
- Keyprefix – Watch a prefix in the KV store
- Services – 监视服务列表
- nodes – 监控节点列表
- service – 监视服务实例
- checks- 监视健康检查的值
- event – 监视用户事件
加上监听之后需要修改启动命令:consul.exe agent -config-dir=server.json -dev,server.json和consul.exe放在同一目录
下一篇 Ocelot中的服务发现、注册、健康检查以及简单的服务治理
--------to be continue --------



