Consul的微服务一般都是集群,集群由一个个的Consul节点组成,在这些Consul节点里面,分为两种角色,Server 以及 Client。
consul节点在启动时可以定义自身角色,client、server两种。
client节点只负责转发外部请求,所有注册到当前节点的服务会被转发到server节点,向server节点进行键值对的读/写,本身是不持久化这些信息,是无状态的;
server节点的职责是使用raft协议保证数据一致性,响应客户端的请求,维护集群状态,与其他数据中心交互,另外所有的信息持久化到本地,这样遇到故障,信息是可以被保留的。节点之间通过gossip广播协议(谣言协议),进行节点之间的数据交互,最终大家达到一致。
现在我们的Consul上微服务有几个服务器 现在我们来看看:

这是所有API服务节点的信息:
当用户需要使用我们的API的信息 我们只需要告诉用户地址 以及 付费的Key 然后就可以使用Api接口
我们接下来进行调用:
调用代码:
//创建consul客户端实例
ConsulClient consulClient = new ConsulClient(cfg =>
{
cfg.Address = new Uri("http://127.0.0.1:8501");
});
//该url中的API对应consul注册服务时的name
var host = "API";
//获取consul下的所有服务
var services = consulClient.Agent.Services().Result.Response.Values.Where(w => w.Service.Equals(host, StringComparison.OrdinalIgnoreCase));
if (!services.Any())
{
return Content(host+"服务未运行,请联系管理!");
}
//随机寻找服务器 减少服务压力
var service = services.ElementAt(Environment.TickCount % services.Count());
var url = $"http://{service.Address}:{service.Port}/API/Note/SendTwo_CYBLOG";
//请求地址
HttpClient httpClient = new HttpClient();
var httpcontent = new StringContent("{key:123}", Encoding.UTF8, "appliction/json");
var res = httpClient.PostAsync(url, httpcontent).Result.Content.ReadAsStringAsync().Result;
return Content(res);当我们使用API服务进行调用时 未找到API服务时 会提示如下:

当服务运行正常时:并验证身份成功以后会返回以下信息:

当输入的Key不正确时 就不能通过服务器验证 就会返回以下信息:

然后我们去看看服务上的变化:

调用成功服务器上的变化:

这样就完美的使用调用 可以统计哪些时非法使用该接口 进行尝试数据操作。
很方便的Consul 就这样部署完毕 就可以使用了。






赞









