Трудно реализовать надежный RPC, я не могу дать подробное руководство о том, как это сделать. Если мы проигнорируем ту же особую ситуацию отказа, я могу дать простой обходной путь:
Во-первых, мы предполагаем, что RPCClient
никогда не завершится неудачей, RPCServer
может произойти сбой в любое время.
RPCClient
необходимо знать, какой запрос является тайм-аутом, чтобы он мог отправить request message
с TTL . После RPCServer
получения request message
и отправки response message
, он должен ACK
request message
.
Если RPCServer
:
- не удалось до потребления
request message
OR
- перед отправкой произошел сбой
response message
request message
будет переиздан на Dead Letter Exchange , так что RPCClient
может потреблять в какую-то очередь, связанную с этим обменом, он может знать, какой запрос истек.