建议读者先学习笔者的另一篇文章 学习搭建 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. ElasticSearch集群灾难:别放弃,也许能再抢救一下 | 京东云技术团队

    ​ 1 前言 Elasticsearch作为一个分布式搜索引擎,自身是高可用的:但也架不住一些特殊情况的发生,如: 集群超过半数的master节点丢失,ES的节点无法形成一个集群,进而导致集群不可用: ...

  2. TienChin 新建业务菜单

    首先是移动菜单,参考下图将菜单移动到下图结构: 我这里将系统监控,系统工具都移动到了系统管理下面,并且排了个序,将多级菜单放在了一起,这样看起来更加的清晰. 修改一下系统管理(100)与TienChi ...

  3. 4.1 Windows驱动开发:内核中进程与句柄互转

    在内核开发中,经常需要进行进程和句柄之间的互相转换.进程通常由一个唯一的进程标识符(PID)来标识,而句柄是指对内核对象的引用.在Windows内核中,EProcess结构表示一个进程,而HANDLE ...

  4. 7.2 C/C++ 实现动态链表

    动态链表是一种常用的动态数据结构,可以在运行时动态地申请内存空间来存储数据,相比于静态数组和静态链表,更加灵活和高效.在动态链表中,数据元素被组织成一条链表,每个元素包含了指向下一个元素的指针,这样就 ...

  5. Django之FBV和CBV模式

    FBV就是 url路由>>>业务处理函数的方式,CBV就是url路由>>>类 的处理业务方式. 最常用的就是FBV模式,就不用过多赘述,直接上CBV的实用代码. 1 ...

  6. 配置PHP的运行环境

    一.wamp Wamp是Windows Apache Mysql PHP的缩写,即在windows下将Apache+PHP+Mysql集成的开发环境,操作简单一键安装,摆脱手动修改配置文件的繁琐. 图 ...

  7. 错误:tensorflow.python.framework.errors_impl.InvalidArgumentError: ValueError: attempt to get argmax of an empty sequence的解决方案

    近日,在使用Cascade R-CNN完成目标检测任务时,我在使用这个模型训练自己的数据集时出现了如下错误: 具体如以下截图所示: 详细错误如下所示: Traceback (most recent c ...

  8. 一句话总结Docker与K8S的关系

    一句话总结:Docker只是容器的一种,它面向的是单体,K8S可以管理多种容器,它面向的是集群,Docker可以作为一种容器方案被K8S管理.下文继续具体介绍. 1.容器的核心概念 介绍这几个核心概念 ...

  9. 使用KVM克隆用于Oracle DB的主机

    首先,通过现有的vm1「在上篇文章 使用KVM创建OEL虚拟机 已创建」克隆出一个vm,名字叫做db1,然后修改一些配置,使其更适用于Oracle DB的主机. 1.通过克隆vm1生成db1 2.解决 ...

  10. .NET 云原生架构师训练营(模块二 基础巩固 配置)--学习笔记

    2.2.3 核心模块--配置 IConfiguration Options ASP.NET Core 中的配置:https://docs.microsoft.com/zh-cn/aspnet/core ...