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