2017-07-08 84 views
0

我已經從官方文檔中瞭解RPC模式,但示例非常簡單。客戶端發送帶有reply_to和correlation_id屬性的消息,服務器從隊列中獲取消息並將其重新發送到綁定相同correlation_id的客戶端。RPC模式問題

我的問題是:

1)如果服務器被關閉是什麼了,客戶端將如何得到響應

2)如何在客戶端

3)如果設置超時RPC服務器壞了,拋出一個異常,如果我們發送這個異常給客戶端

我將不勝感激任何答案。

回答

1
  1. 服務器應答RPC調用是一個很好的做法。像這樣的事情在RabbitMQ docs描述(在Python部分):

    儘管可能性不大,有可能是RPC服務器將只發送我們答案後死亡,但發送確認消息的請求之前。如果發生這種情況,重新啓動的RPC服務器將再次處理該請求。這就是爲什麼在客戶端,我們必須優雅地處理重複的響應,理想情況下RPC應該是冪等的。

  2. 您可以設定消息或整個隊列TTL:https://www.rabbitmq.com/ttl.html

  3. 這要看情況。如果一個請求的冪等性比沒有確認的消息好 - 另一個工作人員會處理它。但它可能會變成毒丸:這樣的請求會填滿您的RPC隊列並導致DoS。因此,您可以手動處理它,例如使用retry_count標頭(在工作人員使用遞減計數器重新排隊消息的情況下)