我已經從官方文檔中瞭解RPC模式,但示例非常簡單。客戶端發送帶有reply_to和correlation_id屬性的消息,服務器從隊列中獲取消息並將其重新發送到綁定相同correlation_id的客戶端。RPC模式問題
我的問題是:
1)如果服務器被關閉是什麼了,客戶端將如何得到響應
2)如何在客戶端
3)如果設置超時RPC服務器壞了,拋出一個異常,如果我們發送這個異常給客戶端
我將不勝感激任何答案。
我已經從官方文檔中瞭解RPC模式,但示例非常簡單。客戶端發送帶有reply_to和correlation_id屬性的消息,服務器從隊列中獲取消息並將其重新發送到綁定相同correlation_id的客戶端。RPC模式問題
我的問題是:
1)如果服務器被關閉是什麼了,客戶端將如何得到響應
2)如何在客戶端
3)如果設置超時RPC服務器壞了,拋出一個異常,如果我們發送這個異常給客戶端
我將不勝感激任何答案。
服務器應答RPC調用是一個很好的做法。像這樣的事情在RabbitMQ docs描述(在Python部分):
儘管可能性不大,有可能是RPC服務器將只發送我們答案後死亡,但發送確認消息的請求之前。如果發生這種情況,重新啓動的RPC服務器將再次處理該請求。這就是爲什麼在客戶端,我們必須優雅地處理重複的響應,理想情況下RPC應該是冪等的。
您可以設定消息或整個隊列TTL:https://www.rabbitmq.com/ttl.html
這要看情況。如果一個請求的冪等性比沒有確認的消息好 - 另一個工作人員會處理它。但它可能會變成毒丸:這樣的請求會填滿您的RPC隊列並導致DoS。因此,您可以手動處理它,例如使用retry_count標頭(在工作人員使用遞減計數器重新排隊消息的情況下)