Watch方法
WatchService 只有一个 Watch 方法。
// Watch 观察将要发生或者已经发生的事件。
// 输入和输出都是流;输入流用于创建和取消观察,而输出流发送事件。
// 一个观察 RPC 可以在一次性在多个 key 范围上观察,并为多个观察流化事件。
// 整个事件历史可以从最后压缩修订版本开始观察。
rpc Watch(stream WatchRequest) returns (stream WatchResponse) {}消息定义
请求的消息体是 WatchRequest:
message WatchRequest {
// request_union 要么是创建新的观察者的请求,要么是取消一个已经存在的观察者的请求
oneof request_union {
WatchCreateRequest create_request = 1;
WatchCancelRequest cancel_request = 2;
}
}创建新的观察者的请求 WatchCreateRequest:
message WatchCreateRequest {
// key 是注册要观察的 key
bytes key = 1;
// range_end 是要观察的范围 [key, range_end) 的终点。
// 如果 range_end 没有设置,则只有参数 key 被观察。
// 如果 range_end 等同于 '\0', 则大于等于参数 key 的所有 key 都将被观察
// 如果 range_end 比给定 key 大1, 则所有以给定 key 为前缀的 key 都将被观察
bytes range_end = 2;
// start_revision 是可选的开始(包括)观察的修订版本。不设置 start_revision 则表示 "现在".
int64 start_revision = 3;
// 设置 progress_notify ,这样如果最近没有事件,etcd 服务器将定期的发送不带任何事件的 WatchResponse 给新的观察者。
// 当客户端希望从最近已知的修订版本开始恢复断开的观察者时有用。
// etcd 服务器将基于当前负载决定它发送通知的频率。
bool progress_notify = 4;
enum FilterType {
// 过滤掉 put 事件
NOPUT = 0;
// 过滤掉 delete 事件
NODELETE = 1;
}
// 过滤器,在服务器端发送事件给回观察者之前,过滤掉事件。
repeated FilterType filters = 5;
// 如果 prev_kv 被设置,被创建的观察者在事件发生前获取上一次的KV。
// 如果上一次的KV已经被压缩,则不会返回任何东西
bool prev_kv = 6;
}取消已有观察者的 WatchCancelRequest :
应答的消息体 WatchResponse:
mvccpb.Event 的消息体:
Last updated