0

以下の領事サービスを登録しています。

curl -s -X GET http://<CONSUL_URL>/v1/catalog/service/myservice | jq .
[
  {
    "ServicePort": 0000,
    "ServiceAddress": "",
    "ServiceTags": null,
    "ServiceName": "myservice",
    "ServiceID": "myservice",
    "Address": "10.3.6.28",
    "Node": "myservice-one"
  },
  {
    "ServicePort": 0000,
    "ServiceAddress": "",
    "ServiceTags": null,
    "ServiceName": "myservice",
    "ServiceID": "myservice",
    "Address": "10.3.6.28",
    "Node": "myservice-main"
  },
  {
    "ServicePort": 0000,
    "ServiceAddress": "",
    "ServiceTags": null,
    "ServiceName": "myservice",
    "ServiceID": "myservice",
    "Address": "10.3.6.26",
    "Node": "myservice-two"
  },
  {
    "ServicePort": 0000,
    "ServiceAddress": "",
    "ServiceTags": null,
    "ServiceName": "myservice",
    "ServiceID": "myservice",
    "Address": "10.3.6.27",
    "Node": "myservice-three"
  }
]


 curl -s -X GET http://10.3.6.21:8500/v1/catalog/node/myservice-main | jq .
{
  "Services": {
    "myservice": {
      "Port": 0000,
      "Address": "",
      "Tags": null,
      "Service": "myservice",
      "ID": "myservice"
    }
  },
  "Node": {
    "Address": "10.3.6.28",
    "Node": "myservice-main"
  }
}

ここに示すように、myservice サービス内にノード myservice-main があります。myservice-main のアドレスが変更されたときに、特定のものを実行したいと考えています。私はそれを達成するのにconsul watchが役立つことを読みましたが、同じためのcurlコマンドを書くことができません. 私の要件を達成するために使用できるhttp APIを教えてもらえますか? リモートシステムからやりたいので、HTTP API(curl)とシェルスクリプトしか使用できません

4

1 に答える 1

0

ブロッキング クエリを実行するにはX-Consul-Index、応答のヘッダーを確認し、それを次のクエリの URL のクエリ パラメータとして使用する必要があります。これがドキュメントです。

ただし、ドキュメントには、サービスに変更がなくても呼び出しが返される可能性があることも記載されています。そして、インデックス番号に注意する必要があります。

代わりに、consul テンプレートを参照することをお勧めします。IP アドレスなど、監視するすべての情報を含むテンプレート ファイルを作成します。consul テンプレートは、この情報が変更されるとすぐにスクリプトを呼び出します。

于 2015-12-12T15:12:38.563 に答える