我還沒有找到一種方法來確定由於tcp背壓(流量控制)而導致發佈者何時掛起。對於我的應用程序,掛任何線程幾乎是不可接受的。如果發生不快,我需要能夠中止發佈操作。我注意到Pika客戶端對此有一個回調,但在c#客戶端文檔中找不到任何東西。有沒有人有這個解決方案?我可以創建一個後臺任務來完成發佈,並在一段時間後中止線程,但這看起來很重要,thread.abort有它自己的問題。當TCP Backpressure激活時,RabbitMQ c#客戶端回調?
1
A
回答
4
RabbitMQ從顯式流量控制切換到通過TCP反壓節流的原因是爲了支持更多的客戶端(其中很多客戶端無法處理像channel.flow
這樣的異步方法)。不幸的是,它的完成方式以及可以說是應該完成的方式對發佈商而言是完全透明的 - 對於發行商來說,限制它的時間是沒有辦法的。
如果您確實有一個硬實時保證發佈,您的唯一選擇是實現手動超時。當然,這並不能解決RabbitMQ超載的基本問題,所以停止發佈,終止連接並打開新連接不會讓你更接近發佈。
所以,你要麼1)需要修改爲什麼你需要這樣嚴格的出版保證或2)增加更多的節點到RabbitMQ cluster(這是死 - 簡單,旨在改善這種情況)。
相關問題
- 1. IOCP C++ TCP客戶端
- 2. Objective-c TCP/IP客戶端
- 3. WM6的C#TCP客戶端
- 4. 客戶端證書clientcert.pem尚未激活
- 5. c#wcf從另一個客戶端調用客戶端回調
- 6. Android客戶端TCP
- 7. 當客戶端關閉TCP連接
- 8. WinRT - TCP客戶端?
- 9. TCP客戶端流
- 10. C#客戶端服務器TCP客戶端收聽
- 11. 運行RabbitMQ java客戶端
- 12. RabbitMQ .NET客戶端和連接超時
- 13. c#tcp服務器客戶端問題
- 14. TCP客戶端閃存AS3
- 15. erlang rabbitmq客戶端池
- 16. 新線程中的C#TCP客戶端?
- 17. tcp客戶端中的bind()調用
- 18. RabbitMq,客戶端關閉TCP連接突然
- 19. C#TCP服務器客戶端
- 20. C#套接字TCP客戶端/服務
- 21. C++多客戶端TCP服務器
- 22. c#TCP/IP服務器和客戶端
- 23. C#檢測TCP客戶端斷開
- 24. 的RabbitMQ二郎客戶端,由C系統()內escript調用
- 25. 客戶端服務器 - (TCP)
- 26. TCP客戶端連接
- 27. EJB3客戶端回調?
- 28. TCP客戶端服務器
- 29. TCP客戶端無法
- 30. 多線程TCP客戶端
我認爲天真的是認爲阻止發佈者(和線程)對某個企業應用程序來說是透明的。如果您有一些業務活動(比如說用戶登錄),並且您想要將發生的事件發佈到系統的其他部分,但您不能在主應用程序線程中可靠地執行此操作,除非您確定永遠不會超出節流水印。添加服務器很好,但是如果你的負載都在spikey中,有時很難預測這種需求。阻止線程可能會對Web應用程序的可伸縮性產生災難性影響。謝謝回覆。 – Brad 2012-02-23 16:43:16
姆姆。我懂了。不幸的是,RabbitMQ並沒有提供實時的保證。 – scvalex 2012-02-24 20:02:35