一架梯子,一头程序猿,仰望星空!

Consul服务注册


consul支持两种方式注册服务信息,使用配置文件或者http接口注册服务。

使用配置文件注册服务

基于配置文件的服务注册方式,是consul官方推荐的方式,因为这种方式对我们微服务应用无侵入,就是不需要写代码调consul的接口注册服务信息。

1.定义一个服务

首先定义一个存放consul配置文件的目录,例如:/etc/consul.d

# 首先创建一个配置文件目录, 确保consul命令有权限访问这个目录即可
mkdir /etc/consul.d

为方便管理,我们通常一个微服务定义一个配置文件,服务定义配置文件是json格式。

例如:定义一个名字叫web的服务。

文件:/etc/consul.d/web.json

{
 "service": {
     "name": "web",
     "tags": ["rails"],
     "port": 80
  }
}

服务配置文件名,可以随便取,通常以服务名命名。

配置文件参数说明:

  • name - 服务名
  • tags - 可以为服务打上标签,是个字符串数组,查询服务的时候可以用来过滤
  • port - 服务的端口
  • address - 服务的ip地址,可选,一般不用填写,注册的时候agent会加上。

2.注册服务

本地开发模式,启动consul的时候,通过config-dir参数指定配置文件目录,就会自动注册配置文件目录下的所有服务。

# 以开发模式启动consul
consul agent -dev -config-dir=/etc/consul.d/

如果你的consul agent已经启动,并且启动的时候已经通过参数config-dir指定了同样的配置目录,只要执行下面命令,重新加载配置文件即可注册服务。

# 重新加载配置
consul reload

提示: 生产环境部署的时候,我通常一台机器就部署一个微服务实例,只要在这台机器上部署一个consul的client,机器启动的时候,自动启动consul client根据配置文件自动注册一个服务

3.查询注册的服务

通过下面命令查询,当前注册的所有服务,会发现web服务已经注册成功。

consul catalog services

输出:

consul
web

其他的服务发现功能,下个章节会详细讲解。

4.反注册

就是删除注册的服务,输入下面命令,会删除注册的服务信息,同时删掉本地的服务的配置文件。

consul services deregister -id=web

参数说明:

  • id - 服务名

使用接口注册服务

通过http接口注册服务,一般不推荐,毕竟还需要在写代码实现服务注册的逻辑,还不如配置文件方便,如果你想通过api注册,可以参考官方服务注册api接口文档:https://www.consul.io/api/catalog.html

提示:目前版本Http接口默认端口是8500, 例如注册服务的地址:http://localhost:8500/v1/catalog/register