美文网首页
consul api读取服务列表

consul api读取服务列表

作者: 天草二十六_简村人 | 来源:发表于2021-09-09 10:01 被阅读0次

一、背景

需要使用acl_token读取consul上的服务列表,主要使用的api为/v1/catalog/services和/v1/catalog/service/$serviceName

二、命令访问

curl \
    --header "X-Consul-Token: 323dsf5t-3ed5-4a36-77ae-5f370e9f54rf" \
    http://172.16.10.65:8500/v1/catalog/services

以及

curl \
    --header "X-Consul-Token: 323dsf5t-3ed5-4a36-77ae-5f370e9f54rf" \
    http://172.16.10.65:8500/v1/catalog/service/user-service

踩坑::

访问/v1/agent/service没有返回值,但是访问/v1/agent/members有值。这个时候却没去思考权限的问题,一直盯着acl_token是最高权限。
/v1/catagory/services访问不报错,只是返回空。坑啊,catagory我是哪里抄来的。

很需要参考网址https://www.cnblogs.com/sshcy/articles/10592734.html,/v1/agent/ 不能使用。

  • catalog endpoints:catalog endpoints用来注册/注销nodes、services、checks

  • agent endpoints:agent endpoints用来和本地agent进行交互,一般用来服务注册和检查注册。

三、程序访问

这里主要采用java语言下的sdk包,

    <dependency>
            <groupId>com.orbitz.consul</groupId>
            <artifactId>consul-client</artifactId>
            <version>1.5.3</version>
        </dependency>

详细的java示例代码见下:

Consul client = Consul.builder()
                .withHostAndPort(HostAndPort.fromString(HOST_AND_PORT))
                .withTokenAuth(ACL_TOKEN)
                .build();

        CatalogClient catalogClient = client.catalogClient();

        ConsulResponse<Map<String, List<String>>> response = catalogClient.getServices();

        Map<String, List<String>> map = response.getResponse();

        for (Map.Entry<String, List<String>> entry : map.entrySet()) {
           // entry.getKey() 就是服务名称,比如user-service
           // 使用明细接口查询一个服务有多少个节点
            ConsulResponse<List<CatalogService>> consulResponse = catalogClient.getService(entry.getKey());

            List<CatalogService> catalogServices = consulResponse.getResponse();

            for (CatalogService catalogService : catalogServices) {
                   // catalogService.getServiceName()
                   // catalogService.getAddress() + ":" + catalogService.getServicePort()
            }
        }

Consul类除了成员变量catalogClient,还有需要其他的,对应不同的endpoints。如果你使用AgentClient试图获取服务列表的话,那么返回的列表是空,也不会有报错提示。这一点需要特别注意。

    private final AgentClient agentClient;
    private final AclClient aclClient;
    private final HealthClient healthClient;
    private final KeyValueClient keyValueClient;
    private final CatalogClient catalogClient;
    private final StatusClient statusClient;
    private final SessionClient sessionClient;
    private final EventClient eventClient;
    private final PreparedQueryClient preparedQueryClient;
    private final CoordinateClient coordinateClient;
    private final OperatorClient operatorClient;
    private final SnapshotClient snapshotClient;

四、acl_token在哪,担心会不会取错了

image.png

acl_token没错,client的jar包也说已支持token机制了,需要核实的是consul api接口用得对不对。

相关文章

  • consul api读取服务列表

    一、背景 需要使用acl_token读取consul上的服务列表,主要使用的api为/v1/catalog/ser...

  • 第1章 consul简介

    1、consul的作用 服务发现Consul clients提供服务(例如API)其他的client发现服务的提供...

  • .net开发常用组件

    consul go语言开发的,服务发现、服务注册 ocelot .net api网关超时、熔断避免某个服务挂断导致...

  • consul

    Consul是一个分布式高可用的系统,它有以下特点: 服务发现:Consul客户能够注册一个服务,比如api或my...

  • consul 的api接口

    1、添加服务https://www.consul.io/api-docs/agent/service#regist...

  • consul API

    配置文件 Consul API

  • go-micro本地环境部署及开发步骤

    关于启动本地服务一、启动consul 二、启动micro api网关 三、启动配置中心box-config 四、启...

  • prometheus相关配置

    consul prometheus作为监控平台,连接consul服务器,当有新服务注册到consul的时候,pro...

  • 使用服务中心consul

    安装consul服务 hyperf文档中并没有说明如何安装 Consul 服务,以下对 Consul 做一个简单的...

  • Prometheus-自动发现服务(Consul实现100台主机

    基于文件的服务发现 prometheus配置 文件配置 基于Consul的服务发现 架构图 启动consul服务 ...

网友评论

      本文标题:consul api读取服务列表

      本文链接:https://www.haomeiwen.com/subject/qgjvwltx.html