>
Consul 微服务的访问
2021-02-08 10:56
微服务
  • 607
  • 527
  • 64
  • 51

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

现在我们的Consul上微服务有几个服务器 现在我们来看看:

Consul服务节点.png

这是所有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服务时 会提示如下:

image.png

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

image.png

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

image.png

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

image.png

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

image.png

这样就完美的使用调用 可以统计哪些时非法使用该接口 进行尝试数据操作。

很方便的Consul 就这样部署完毕 就可以使用了。

全部留言 ()
返回
顶部