Suppose I have two micro services, A and B, where A makes a gRPC call to B with some data, and B performs a long running task and publishes an event with the result on completion that A and other services consume.
If B is up when the call is made but, for some non-deterministic reason, crashes while processing the data and has to be respawned, how can A still get its result?
In something like Kafka this isn't a problem as messages are kept until they are deleted/the timeout passes, but without a message queue I can't really see any way for either A to trigger the process again, or for B to keep track of events it hasn't processed.

