跳到主要内容

05、Consul:服务注册示例

这篇文章结合具体的示例来介绍如何在Consul中进行服务的注册。

事前准备

Consul安装

本文示例使用的Consul版本信息如下

liumiaocn:~ liumiao$ consul --version
Consul v1.7.1
Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)
liumiaocn:~ liumiao$ 

服务定义

使用服务定义只最为通用的服务注册的方式,在Consul中也可以通过HTTP API方式进行,在本文中直接使用Consul配置方式,通过-config-dir选项指定配置文件所在的目录,在启动时会讲指定目录下服务定义文件全部读入并进行注册。

本文示例中使用如下两个服务定义在Consul启动时进行注册:

liumiaocn:consul.d liumiao$ ls
service-nginx.json	service-tornado.json
liumiaocn:consul.d liumiao$ cat service-nginx.json 
{
   
     
	"service": {
   
     
		"name": "nginx",
		"tags": ["nginx-tag"],
		"port": 80
	}
}
liumiaocn:consul.d liumiao$ 
liumiaocn:consul.d liumiao$ cat service-tornado.json 
{
   
     
	"service": {
   
     
		"name": "tornado",
		"tags": ["tornado-tag"],
		"port": 8080
	}
}
liumiaocn:consul.d liumiao$ 

服务定义文件名称 服务名称 tag信息 端口信息
service-nginx.json nginx nginx-tag 80
service-tornado.json tornado tornado-tag 8080

启动Consul服务

使用开发模式启动Consul服务,并指定配置文件所在的目录(本例中使用当前目录)

执行命令:consul agent -dev -enable-script-checks -config-dir=.

注意事项:注意enable-script-checks选项中可能会有一定的安全隐患,某些设定可能引入远程执行的漏洞从而被恶意软件所利用,在生产环境中官方建议使用enable-local-script-checks选项进行替代。

启动日志如下所示:

liumiaocn:consul.d liumiao$ ls
service-nginx.json	service-tornado.json
liumiaocn:consul.d liumiao$ consul agent -dev -enable-script-checks -config-dir=.
==> Starting Consul agent...
           Version: 'v1.7.1'
           Node ID: '714da227-6852-8f47-4734-acfd64f09dee'
         Node name: 'liumiaocn'
        Datacenter: 'dc1' (Segment: '<all>')
            Server: true (Bootstrap: false)
       Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600)
      Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
           Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false

==> Log data will now stream in as it occurs:

    2021-02-29T11:52:46.162+0800 [DEBUG] agent: Using random ID as node ID: id=714da227-6852-8f47-4734-acfd64f09dee
    2021-02-29T11:52:46.163+0800 [DEBUG] agent.tlsutil: Update: version=1
    2021-02-29T11:52:46.163+0800 [DEBUG] agent.tlsutil: OutgoingRPCWrapper: version=1
    2021-02-29T11:52:46.164+0800 [INFO]  agent.server.raft: initial configuration: index=1 servers="[{Suffrage:Voter ID:714da227-6852-8f47-4734-acfd64f09dee Address:127.0.0.1:8300}]"
    2021-02-29T11:52:46.164+0800 [INFO]  agent.server.raft: entering follower state: follower="Node at 127.0.0.1:8300 [Follower]" leader=
    2021-02-29T11:52:46.164+0800 [INFO]  agent.server.serf.wan: serf: EventMemberJoin: liumiaocn.dc1 127.0.0.1
    2021-02-29T11:52:46.165+0800 [INFO]  agent.server.serf.lan: serf: EventMemberJoin: liumiaocn 127.0.0.1
    2021-02-29T11:52:46.165+0800 [INFO]  agent.server: Adding LAN server: server="liumiaocn (Addr: tcp/127.0.0.1:8300) (DC: dc1)"
    2021-02-29T11:52:46.165+0800 [INFO]  agent.server: Handled event for server in area: event=member-join server=liumiaocn.dc1 area=wan
    2021-02-29T11:52:46.165+0800 [INFO]  agent: Started DNS server: address=127.0.0.1:8600 network=tcp
    2021-02-29T11:52:46.165+0800 [INFO]  agent: Started DNS server: address=127.0.0.1:8600 network=udp
    2021-02-29T11:52:46.165+0800 [INFO]  agent: Started HTTP server: address=127.0.0.1:8500 network=tcp
    2021-02-29T11:52:46.165+0800 [INFO]  agent: Started gRPC server: address=127.0.0.1:8502 network=tcp
    2021-02-29T11:52:46.165+0800 [INFO]  agent: started state syncer
==> Consul agent running!
    2021-02-29T11:52:46.218+0800 [WARN]  agent.server.raft: heartbeat timeout reached, starting election: last-leader=
    2021-02-29T11:52:46.218+0800 [INFO]  agent.server.raft: entering candidate state: node="Node at 127.0.0.1:8300 [Candidate]" term=2
    2021-02-29T11:52:46.218+0800 [DEBUG] agent.server.raft: votes: needed=1
    2021-02-29T11:52:46.218+0800 [DEBUG] agent.server.raft: vote granted: from=714da227-6852-8f47-4734-acfd64f09dee term=2 tally=1
    2021-02-29T11:52:46.218+0800 [INFO]  agent.server.raft: election won: tally=1
    2021-02-29T11:52:46.218+0800 [INFO]  agent.server.raft: entering leader state: leader="Node at 127.0.0.1:8300 [Leader]"
    2021-02-29T11:52:46.218+0800 [INFO]  agent.server: cluster leadership acquired
    2021-02-29T11:52:46.218+0800 [INFO]  agent.server: New leader elected: payload=liumiaocn
    2021-02-29T11:52:46.222+0800 [DEBUG] connect.ca.consul: consul CA provider configured: id=07:80:c8:de:f6:41:86:29:8f:9c:b8:17:d6:48:c2:d5:c5:5c:7f:0c:03:f7:cf:97:5a:a7:c1:68:aa:23:ae:81 is_primary=true
    2021-02-29T11:52:46.235+0800 [INFO]  agent.server.connect: initialized primary datacenter CA with provider: provider=consul
    2021-02-29T11:52:46.235+0800 [INFO]  agent.leader: started routine: routine="CA root pruning"
    2021-02-29T11:52:46.235+0800 [DEBUG] agent.server: Skipping self join check for node since the cluster is too small: node=liumiaocn
    2021-02-29T11:52:46.235+0800 [INFO]  agent.server: member joined, marking health alive: member=liumiaocn
    2021-02-29T11:52:46.308+0800 [DEBUG] agent: Skipping remote check since it is managed automatically: check=serfHealth
    2021-02-29T11:52:46.308+0800 [INFO]  agent: Synced node info
    2021-02-29T11:52:46.309+0800 [INFO]  agent: Synced service: service=nginx
    2021-02-29T11:52:46.309+0800 [INFO]  agent: Synced service: service=tornado
    2021-02-29T11:52:48.224+0800 [DEBUG] agent.tlsutil: OutgoingRPCWrapper: version=1
    2021-02-29T11:52:48.751+0800 [DEBUG] agent: Skipping remote check since it is managed automatically: check=serfHealth
    2021-02-29T11:52:48.751+0800 [DEBUG] agent: Node info in sync
    2021-02-29T11:52:48.751+0800 [DEBUG] agent: Service in sync: service=tornado
    2021-02-29T11:52:48.751+0800 [DEBUG] agent: Service in sync: service=nginx
    2021-02-29T11:52:48.751+0800 [DEBUG] agent: Node info in sync
    2021-02-29T11:52:48.751+0800 [DEBUG] agent: Service in sync: service=nginx
    2021-02-29T11:52:48.751+0800 [DEBUG] agent: Service in sync: service=tornado

从日志信息中我们可以看到如下内容,可以看到Synced service: service=nginx和Synced service: service=tornado的提示信息,这些就是Consul在加载指定配置目录下的服务定义文件的输出信息。

    2021-02-29T11:52:46.308+0800 [INFO]  agent: Synced node info
    2021-02-29T11:52:46.309+0800 [INFO]  agent: Synced service: service=nginx
    2021-02-29T11:52:46.309+0800 [INFO]  agent: Synced service: service=tornado
    ... 省略
    2021-02-29T11:52:48.751+0800 [DEBUG] agent: Node info in sync
    2021-02-29T11:52:48.751+0800 [DEBUG] agent: Service in sync: service=tornado
    2021-02-29T11:52:48.751+0800 [DEBUG] agent: Service in sync: service=nginx
    2021-02-29T11:52:48.751+0800 [DEBUG] agent: Node info in sync
    2021-02-29T11:52:48.751+0800 [DEBUG] agent: Service in sync: service=nginx
    2021-02-29T11:52:48.751+0800 [DEBUG] agent: Service in sync: service=tornado

结果确认

从Consul的web UI也能很清楚地进行结果的确认
 
nginx服务的详细信息
 
tornado服务的详细信息
 
注意:本文示例中注册的服务还尚未启动,我们并没有事前在80端口启动一个nginx服务,在8080端口启动一个tornado服务,在Consul中可以注册尚未启动和运行的服务。

参考内容

https://learn.hashicorp.com/consul/getting-started/services?utm_source=consul.io&utm_medium=docs

版权声明:「DDKK.COM 弟弟快看,程序员编程资料站」本站文章,版权归原作者所有

来源:https://blog.csdn.net/liumiaocn/category_9752887.html