syntax = "proto3"; package go.micro.registry; service Registry { rpc GetService(GetRequest) returns (GetResponse) {}; rpc Register(Service) returns (EmptyResponse) {}; rpc Deregister(Service) returns (EmptyResponse) {}; rpc ListServices(ListRequest) returns (ListResponse) {}; rpc Watch(WatchRequest) returns (stream Result) {}; rpc Sync(SyncRequest) returns (SyncResponse) {}; } // Service represents a go-micro service message Service { string name = 1; string version = 2; map metadata = 3; repeated Endpoint endpoints = 4; repeated Node nodes = 5; } // Node represents the node the service is on message Node { string id = 1; string address = 2; int64 port = 3; map metadata = 4; } // Endpoint is a endpoint provided by a service message Endpoint { string name = 1; Value request = 2; Value response = 3; map metadata = 4; } // Value is an opaque value for a request or response message Value { string name = 1; string type = 2; repeated Value values = 3; } // Result is returns by the watcher message Result { string action = 1; // create, update, delete Service service = 2; int64 timestamp = 3; // unix timestamp } message EmptyResponse {} message GetRequest { string service = 1; } message GetResponse { repeated Service services = 1; } message ListRequest { // TODO: filtering } message ListResponse { repeated Service services = 1; } message WatchRequest { // service is optional string service = 1; } // SyncRequest to request registry sync message SyncRequest {} message SyncResponse { repeated Service services = 1; } // EventType defines the type of event enum EventType { Create = 0; Delete = 1; Update = 2; } // Event is registry event message Event { // Event Id string id = 1; // type of event EventType type = 2; // unix timestamp of event int64 timestamp = 3; // service entry Service service = 4; }