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-app
job将执行/bin/update-app.sh
。