建议读者先学习笔者的另一篇文章 学习搭建 Consul 服务发现与服务网格-有丰富的示例和图片,这样了解 consul 大体的结构和学习集群搭建,摸清 consul 的服务注册发现配置方法。

本文 HTTP API 请求使用 postman 测试,读者可以打开 https://documenter.getpostman.com/view/5988188/TzCV4jqL 查看 HTTP 文档,并可直接导入 postman 测试。

搭建起 consul

Consul 支持基础结构的服务注册和发现(称为内部服务),也支持外部服务(第三方 SAAS服务以及无法直接运行 Consul 代理的其它环境,例如 redis)。

直接使用 sudo apt-get install consul命令即可安装 consul,你也可以参考导读中笔者的另一篇文章,里面提到了详细的安装方法。

然后我们使用命令启动 consul:

consul agent -dev -client 0.0.0.0 -enable-script-checks -node=web -ui

上面配置指定了允许任何 ip 连接到此 consul,-enable-script-checks 开启 consul 进行简单的基于 ping 的运行状况检查;-node 命名此 consul 节点名称为 web,并开启 UI(-ui)访问(端口8500)。

注:如果是生产环境,则应在 consul 的配置文件中启用 enable_script_checks = true,以持久化配置。

Consul 的 HTTP API

Consul 的主要接口是 Restful HTTP API,这些 API 可以对节点、服务、检查、配置等对象执行基本的 CRUD 操作。

官方 API 文档地址:https://www.consul.io/api-docs/index

在 consul 中,有四类 HTTP API,agent、service、check、connect,后面会介绍这些 API 中常用 API 的操作和参数配置。

Service API

Service 相关的 API 都在 /v1/agent/service 下,这里来列一下这些 API 地址(省略了/v1),凑些字数。

  • /agent/services:该端点返回在本地代理程序中注册的所有服务;
  • /agent/service/{service_id}:返回在本地代理上注册的单个服务实例的完整服务定义;
  • /agent/health/service/name/{service_name}/ /agent/health/service/id/{service_id}:通过名称或id检索本地代理上的聚合服务状态;
  • /agent/service/register:注册服务;
  • /agent/service/deregister/{service_id} :注销服务;
  • /agent/service/maintenance/{service_id}:该端点将给定的服务置于“维护模式”,在维护模式下,该服务将被标记为不可用,并且不会出现在DNS或API查询中;

通过这些 API,可以注册服务以及注销服务,下面介绍一下一些只要的 API 的使用方法。

简单地注册服务

本小节介绍通过 HTTP API 方式,简单注册一个服务并配置健康检查,接下来我们将使用 HTTP API 原生请求的方式,一步步了解 consul 中如何注册服务,并了解一些参数的使用,这里尽量做到与编程语言无关。

这是官方文档给出的一个注册服务的配置示例:

{
"id": "web1",
"name": "web",
"port": 80,
"check": {
"name": "ping check",
"args": ["ping", "-c1", "learn.hashicorp.com"],
"interval": "30s",
"status": "passing"
}
}

我们先来了解一下这个配置的字段。

id 为这个服务的唯一标记,而 name 表示此服务的逻辑名称; check 是健康检查的配置,后面会单独介绍。

通过 HTTP API 注册服务,请求的信息如下(curl命令):

curl --location -g --request PUT 'http://{{consul}}:8500/v1/agent/service/register' \
--data-raw '{
"id": "web1",
"name": "web",
"port": 80,
"check": {
"name": "ping check",
"args": ["ping", "-c1", "learn.hashicorp.com"],
"interval": "30s",
"status": "passing"
}
}
'

如果要查询相应的服务是否已经注册,则可使用 /v1/catalog/service/{name} 查询。

curl http://{{consul}}:8500/v1/catalog/service/web

由于我们配置了健康检查,可以在 UI 上看到详细结果。

健康检查的配置和查询

健康检查配置:

  "check": {
"name": "ping check",
"args": ["ping", "-c1", "learn.hashicorp.com"],
"interval": "30s",
"status": "passing"
}

check 对象用于运行状况检查,上面的配置就是每 30s 执行 ping 命令,检查 learn.hashicorp.com 是否可以访问,status 表示注册时此服务的初始状态。

args 最终会组合成一条命令: ping -c1 learn.hashicorp.com-c1 即表示只 ping 1次。ping 失败时提示:

ping: learn.hashicorp.com: Temporary failure in name resolution

Consul 支持 Script, HTTP, TCP, Time to Live (TTL), Docker, and gPRC 等方式进行监控检查,例如 HTTP 形式,可以这样写配置:

      "Definition": {
"http": "https://learn.hashicorp.com/consul/",
"interval": "30s"
}

如果要获得读取本地节点上所有服务的运行状况检查结果,则可以直接通过 HTTP GET 请求 http://{{consul}}:8500/v1/agent/checks 获得。结果如下:

{
"service:web1": {
"Node": "web",
"CheckID": "service:web1",
"Name": "ping check",
"Status": "critical",
"Notes": "",
"Output": "ping: learn.hashicorp.com: Temporary failure in name resolution\n",
"ServiceID": "web1",
"ServiceName": "web",
"ServiceTags": [],
"Type": "script",
"Definition": {},
"CreateIndex": 0,
"ModifyIndex": 0
}
}

如果要单独查询节点上的某个服务,可以使用:

/health/service/{name}

如果要查询某个节点上的所有服务,可以使用:

/health/node/{name}

本文内容较少,API 较多,不需要全部都测试一次,可以挑一些常用的了解即可。不同编程语言都有相应的库,不需要基于 HTTP API 编写代码,可以直接调用官方提供的 SDK。

consul 的 HTTP API 和使用方法的更多相关文章

  1. 百度地图api简单使用方法

    百度地图API的使用方法   百度地图API 开始学习百度地图API最简单的方式是看一个简单的示例.以下代码创建了一个520x340大小的地图区域并以天安门作为地图的中心: 1. <html&g ...

  2. Windows CE Notification API的使用方法

    1 引言      以Windows CE 为操作系统的掌上电脑(如PocketPC或HPC),除具备PC的功能外,还具备很强的自身控制能力.Windows CE API超越微软其他操作系统的 API ...

  3. Elasticsearch java api 常用查询方法QueryBuilder构造举例

    转载:http://m.blog.csdn.net/u012546526/article/details/74184769 Elasticsearch java api 常用查询方法QueryBuil ...

  4. SpringMVC系列(五)使用 Serlvet 原生的 API 作为目标方法的参数

    SpringMVC的Handler方法可以接受哪些 ServletAPI 类型的参数 • HttpServletRequest• HttpServletResponse• HttpSession• j ...

  5. Atitit.提升api兼容性的方法 v3 q326

    Atitit.提升api兼容性的方法 v3 q326 1. Atitit.兼容性的“一加三”策略1 2. 2. 扩展表模式1 3. 3. 同时运行模式1 3.1. 3.1. 完美的后向兼容性2 3.2 ...

  6. StringUtils类API及使用方法详解

    StringUtils类API及使用方法详解 StringUtils方法概览 判空函数 1)StringUtils.isEmpty(String str) 2)StringUtils.isNotEmp ...

  7. SpringMvc 支持一下类型Serlvet 原生的 API 作为目标方法的参数

    /** * 可以使用 Serlvet 原生的 API 作为目标方法的参数 具体支持以下类型 * * HttpServletRequest * HttpServletResponse * HttpSes ...

  8. 8 种提升 ASP.NET Web API 性能的方法

    ASP.NET Web API 是非常棒的技术.编写 Web API 十分容易,以致于很多开发者没有在应用程序结构设计上花时间来获得很好的执行性能. 在本文中,我将介绍8项提高 ASP.NET Web ...

  9. 在Android中,使用Kotlin的 API请求简易方法

    原文标题:API request in Android the easy way using Kotlin 原文链接:http://antonioleiva.com/api-request-kotli ...

  10. 如何让ASP.NET Web API的Action方法在希望的Culture下执行

    在今天编辑推荐的<Hello Web API系列教程--Web API与国际化>一文中,作者通过自定义的HttpMessageHandler的方式根据请求的Accep-Language报头 ...

随机推荐

  1. K8S 使用loki 监控 应用日志的搭建办法

    1. 背景 这几天一直在用k8s部署分SU的测试环境,开发反馈看日志比较麻烦. 昨天晚上在家里本来想搭建ELK 发现比较重, 又说有一个比较轻量级的 loki 可以实现使用grafana进行监控和查看 ...

  2. pytest-assume插件-多重校验

    自动化接口测试我们通常会对一条case设置多条断言,这样就会出现一个问题,如果前面一 个校验不通过,那么后面的校验就不会走到,如下图,可以看到校验走到assert False就不往 下走了,这个时候p ...

  3. TortoiseGit 常见问题汇总

    1.test分支修改后合并到master分支 1)切换本地分支到master分支 2)TortoiseGit --->  merge,选择远程分支test 提交到远程分支master 2.将远程 ...

  4. ansible使用,搭建mongo的replica-set小结

    ansible 前言 常用到的指令 查看ip是否可用 执行 执行,查看日志输出 查看这个 playbook 的执行会影响到哪些 hosts 设置服务器免密登录 ansible了解 变量名的使用 pla ...

  5. 【二】分布式训练---参数服务器训练(飞桨paddle1.8)

    1.参数服务器训练简介 参数服务器训练是分布式训练领域普遍采用的编程架构,主要解决以下两类问题: 模型参数过大:单机内存空间不足,需要采用分布式存储. 训练数据过多:单机训练太慢,需要加大训练节点,来 ...

  6. PostFix+Dovecot 部署邮件系统

    Postfix 是一种电子邮件服务器是一个开放源代码的软件. Postfix 是MTA邮件传输代理软件.是sendmail提供替代品的一个尝试,在Internet世界中,大部分的电子邮件都是通过sen ...

  7. HBase-compact介绍(minor和major区别)

    一.minor和major的区别: Minor Compaction:指选取一些小的.相邻的HFile将他们合并成一个更大的HFile,但不会清理过期(TTL)和删除(打上Delete标记)的数据.  ...

  8. offline 2 online | Cal-QL:校准保守 offline 训出的 Q value,让它与真实 reward 尺度相当

    论文标题:Cal-QL: Calibrated Offline RL Pre-Training for Efficient Online Fine-Tuning. NeurIPS 2023,5 5 6 ...

  9. CF1834

    A 给出一个由 \(1,-1\) 组成的序列.一次操作可以让一个数变相反. 要多少次操作,才能让整个序列和非负且积等于 \(1\). 大 氵题. B 定义两个数 \(A,B\) 有一个价值:每一位上的 ...

  10. 如何在.NET Core中为gRPC服务设计消息

    如何在.NET Core中为gRPC服务设计消息 使用协议缓冲区规范定义gRPC服务非常容易,但从需求转换为.NET Core,然后管理服务的演变时,需要注意几件事. 创建gRPC服务的核心是.pro ...