watch是在consul进行监视的服务配置。 watch轮询服务的状态,并在服务变得健康,变得不健康或者实例数量发生变化时发出事件。 请注意,watch不包括行为; watch只发出事件,以便job可以消耗该事件。

watch配置仅包括以下字段:

watches: [
  {
    name: "backend",
    interval: 3,
    tag: "prod",    // optional
    dc: "us-east-1" // optional
  }
]

interval是轮询尝试consul之间的时间(以秒为单位)。 name是要查询的服务, tag是添加到查询中的可选标记, dc是可选的Consul 数据中心进行查询。

watch保留与服务相关联的健康IP地址的内存列表。 该列表不会持久存储在磁盘中,并且如果ContainerPilot重新启动,则需要使用规范数据存储区(即Consul)来检查。 如果此列表在轮询之间更改,watch将发出一个或两个事件:
  • 每当发生变化时, changed事件。
  • 每当观看的服务变得健康时,就会发出healthy事件。 这可能意味着state以前是未知的(就像当ContainerPilot第一次启动时),或者它以前是不健康的,现在是健康的。 此事件只会针对实例的状态或计数的每次更改触发一次。 返回相同值的后续轮询不会再次发生事件。
  • 每当观看的服务变得不健康时,会发出unhealthy事件。 这可能意味着当我们第一次轮询时,该服务还没有运行,或者它以前是健康的,现在是不健康的。 这个事件只会在状态变化时被触发一次。 返回相同值的后续轮询不会再次发生事件。

watch发出的事件的名称命名为不与内部job名称相冲突。 这些事件以watch为前缀。 以下是监听观看事件的job示例配置:

jobs: [
  {
    name: "update-app",
    exec: "/bin/update-app.sh",
    when: {
      source: "watch.backend",
      each: "changed"
    }
  }
],
watches: [
  {
    name: "backend",
    interval: 3
  }
]
在这个例子中,watchbackend将每3秒检查一次。 每次watch发射changed事件时, update-appjob将执行/bin/update-app.sh