diff --git a/proto/controls/service/data_cache/data_cache.proto b/proto/controls/service/data_cache/data_cache.proto new file mode 100644 index 0000000..7cf6eb4 --- /dev/null +++ b/proto/controls/service/data_cache/data_cache.proto @@ -0,0 +1,75 @@ +syntax = "proto3"; + +package services.data_cache; + +service DataCacheService { + // Create a topic with partitions and replication factor + rpc CreateMQ(CreateMQRequest) returns (CreateMQResponse); + + // Create many topics with identical partitions and replication factor + rpc CreateNMQs(CreateMQsRequest) returns (CreateMQResponse); + + // Send a single message to a topic + rpc PushMQ(PushMQRequest) returns (ProducersResponse); + + // Send a single message to many topic + rpc PushMQs(PushMQsRequest) returns (ProducersResponse); + + // Get message from a topic + rpc PullMQ(PullMQRequest) returns (ConsumersResponse); + + // Get messages from many topics + rpc PullMQs(PullMQsRequest) returns (ConsumersResponse); +} + +message CreateMQRequest { + string mq_name = 1; // topic name + int32 partitions = 2; // Each topic can be devided into multiple partitions + int32 replication_factor = 3; // replication for high availibility +} + +message CreateMQsRequest { + string mq_names = 1; // topic names separed with ',' e.g. topic1, topic2, topic3 + int32 partitions = 2; // Each topic can be devided into multiple partitions + int32 replication_factor = 3; // replication for high availibility +} + +message CreateMQResponse { + bool success = 1; // success or failure + string message = 2; // response (error message if failure) +} + +message PushMQRequest { + string mq_name = 1; // topic name + string key = 2; // optional + bytes value = 3; // message +} + +message PushMQsRequest { + string mq_names = 1; // list of topics + string key = 2; // optional + bytes value = 3; // message +} + +message ProducersResponse { + bool success = 1; // success or failure + string messages_with_offsets = 2; // response offset / error message if failure +} + +message PullMQRequest { + string mq_name = 1; // topic name + int32 timeout_seconds = 2; // optional, stop after secs (0 = no timeout) +} + +message PullMQsRequest { + string mq_names = 1; // list of topics + int32 timeout_seconds = 2; // optional, stop after secs (0 = no timeout) +} + +message ConsumersResponse { + string keys = 1; // associated key or keys + bytes values = 2; // response + string offsets = 3; // offset or many offsets + string partitions = 4; // partition or many partitions +} +