Consul入门03 - 注册服务
在前面的步驟,我們運(yùn)行了第一個(gè)代理,看到了集群的成員,并且查詢了節(jié)點(diǎn)信息。在這篇指南里,我們將注冊(cè)我們第一個(gè)服務(wù)并且查詢這個(gè)服務(wù)。
定義一個(gè)服務(wù)
一個(gè)服務(wù)能夠通過提供一個(gè)服務(wù)定義或者調(diào)用適當(dāng)?shù)腍TTP API來注冊(cè)。
服務(wù)定義是最通用的注冊(cè)服務(wù)方法,那么我們將使用這種方法來注冊(cè)服務(wù)。我們將建構(gòu)一個(gè)代理配置,前面的步驟已經(jīng)描述過。
首先,為Consul配置創(chuàng)建一個(gè)目錄。Consul裝載配置目錄中所有的配置文件,通常在Unix系統(tǒng)中慣例是建立以名為?/etc/consul.d?的目錄(?.d?后綴暗示這個(gè)目錄包含了一些配置文件的集合)。
$ sudo mkdir /etc/consul.d下一步,我們將創(chuàng)建一個(gè)服務(wù)定義配置文件。我們假設(shè)我們有一個(gè)名為“web"服務(wù),它運(yùn)行在80端口。另外我們?yōu)樗O(shè)置一個(gè)標(biāo)記,那么我們就可以通過它來查詢到這個(gè)服務(wù):
$ echo '{"service": {"name": "web", "tags": ["rails"], "port": 80}}' \>/etc/consul.d/web.json現(xiàn)在,我們重啟代理,并提供配置目錄參數(shù):
$ consul agent -dev -config-dir /etc/consul.d ==> Starting Consul agent... ...[INFO] agent: Synced service 'web' ...你會(huì)注意到在輸出中"synced service 'web'"。這意味著代理已經(jīng)從配置文件中裝載了該服務(wù)定義,并且已經(jīng)成功注冊(cè)該服務(wù)到服務(wù)目錄中。
如果你想注冊(cè)多個(gè)服務(wù),你可以在Consul配置目錄中創(chuàng)建多個(gè)服務(wù)定義文件。
查詢服務(wù)
一旦代理啟動(dòng)并且服務(wù)已經(jīng)同步,我們就可以使用DNS或者HTTP API來查詢服務(wù)了。
DNS API
讓我們首先使用DNS API查詢我們的服務(wù)。對(duì)于DNS API,服務(wù)的DNS名稱是?NAME.service.consul?。默認(rèn)所有的DNS名稱都是在?consul?名稱空間下,當(dāng)然這個(gè)是可配置的。service?子域名告訴Consul我們正在查詢服務(wù),并且?NAME?就是要查詢的服務(wù)的名稱。
對(duì)于我們注冊(cè)的web服務(wù),對(duì)應(yīng)的查詢?cè)O(shè)置就是?web.service.consul?:
$ dig @127.0.0.1 -p 8600 web.service.consul ...;; QUESTION SECTION: ;web.service.consul. IN A;; ANSWER SECTION: web.service.consul. 0 IN A 172.20.20.11你可以看到,一個(gè)帶了節(jié)點(diǎn)的IP地址的?A?記錄被返回了,它就是可用的服務(wù)。?A?記錄只能包含IP地址。
你也可以使用DNS API來獲取完整的地址/端口的?SRV?記錄:
$ dig @127.0.0.1 -p 8600 web.service.consul SRV ...;; QUESTION SECTION: ;web.service.consul. IN SRV;; ANSWER SECTION: web.service.consul. 0 IN SRV 1 1 80 Armons-MacBook-Air.node.dc1.consul.;; ADDITIONAL SECTION: Armons-MacBook-Air.node.dc1.consul. 0 IN A 172.20.20.11SRV?記錄顯示了web服務(wù)證運(yùn)行在節(jié)點(diǎn)?Armons-MacBook-Air.node.dc1.consul.?的80端口上。額外的部分和?A?記錄返回的內(nèi)容一樣。
最后,我們可以使用DNS API基于標(biāo)記來過濾服務(wù),基于標(biāo)記的服務(wù)查詢的格式是?TAG.NAME.service.consul?。 在下面的例子里,我們請(qǐng)求Consul查詢所有含"rails"標(biāo)記的web服務(wù)。我們得到了我們注冊(cè)的帶有該標(biāo)記的服務(wù)的響應(yīng):
$ dig @127.0.0.1 -p 8600 rails.web.service.consul ...;; QUESTION SECTION: ;rails.web.service.consul. IN A;; ANSWER SECTION: rails.web.service.consul. 0 IN A 172.20.20.11HTTP API
除了DNS API,HTTP API也可以用于服務(wù)查詢:
$ curl http://localhost:8500/v1/catalog/service/web [{"Node":"Armons-MacBook-Air","Address":"172.20.20.11","ServiceID":"web", \"ServiceName":"web","ServiceTags":["rails"],"ServicePort":80}]該目錄API返回了指定節(jié)點(diǎn)以及指定的服務(wù)信息。就像我們馬上要看到了健康檢測(cè),通常我們的查詢只是查詢那些健康的實(shí)例,這些實(shí)例都是通過了健康檢測(cè)的。這也是DNS在底層做的事情。下面的查詢只查詢健康的實(shí)例:
$ curl 'http://localhost:8500/v1/health/service/web?passing' [{"Node":"Armons-MacBook-Air","Address":"172.20.20.11","Service":{ \"ID":"web", "Service":"web", "Tags":["rails"],"Port":80}, "Checks": ...}]更新服務(wù)
當(dāng)配置文件修改后服務(wù)定義可以被更新,需要發(fā)送?SIGHUP?信號(hào)給代理。這可以讓代理更新服務(wù)而無需停止代理或者讓服務(wù)查詢時(shí)服務(wù)不可用。
可以選擇HTTP API來動(dòng)態(tài)地增加,刪除,以及更改服務(wù)。
下一步
我們現(xiàn)在配置了一個(gè)單代理,并且注冊(cè)了一個(gè)服務(wù)。進(jìn)展非常不錯(cuò),但是下一步我們會(huì)展示Consul里最有價(jià)值的特性,[設(shè)置我們第一個(gè)集群]()!
總結(jié)
以上是生活随笔為你收集整理的Consul入门03 - 注册服务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Consul入门02 - 运行Consu
- 下一篇: Consul入门04 - Consul集