I am planning to implement Fire-and-Forget through message-marker in the following way:
rpc foo(Bar) returns (Ack);
And for the metadata push:
rpc foo(Ack) returns (Ack);
So, effectively, Ack means nothing to be send, for the fire-and-forget we expect to send data, but never receive a response – that's why there's Ack. For the metadata push, we don't expect to have request/response data to be sent/received – that's why we use Ack for the both.
In addition, Ack can be considered as google.protobuf.Empty alternative, but as it can lead to the misunderstanding the concepts and compatibility problems (that gRPC and google.protobuf.Empty does not have – there's not dedicated request types as it's in the RSocket), we introduce alternative structure. Naming is still considered.
I am planning to implement Fire-and-Forget through message-marker in the following way:
And for the metadata push:
So, effectively,
Ack
means nothing to be send, for the fire-and-forget we expect to send data, but never receive a response – that's why there'sAck
. For the metadata push, we don't expect to have request/response data to be sent/received – that's why we use Ack for the both.In addition, Ack can be considered as
google.protobuf.Empty
alternative, but as it can lead to the misunderstanding the concepts and compatibility problems (that gRPC andgoogle.protobuf.Empty
does not have – there's not dedicated request types as it's in the RSocket), we introduce alternative structure. Naming is still considered.