阿里云國際站經銷商,主營阿里云,騰訊云,華為云,亞馬遜aws,谷歌云gcp,微軟云az,免費開戶,代充值優(yōu)惠大,聯系客服飛機@jkkddd
背景信息
消息服務MNS提供了LongPolling類型的接收消息的方法,在接收消息的時候把等待時間設置在1s~30s。使用LongPolling可以讓請求一直在服務器上運行,等到有消息的時候才返回。既可以保證第一時間收到消息,又避免您發(fā)送大量無效請求。LongPolling是消息服務MNS的推薦用法。
LongPolling參數設置,請參見ReceiveMessage。
LongPolling需要HTTP層的長連接保持在服務器上,而對于服務器來說,HTTP層的長連接的資源是有限的。為了避免受到惡意攻擊,消息服務MNS對單用戶的每個Queue的連接數是有限制的。具體信息,請參見使用限制。
問題描述
您在單臺機器上開啟上百個線程,即發(fā)送上百個LongPolling的請求,同時訪問消息服務MNS服務器獲取消息。如果您使用了多臺機器,那么可能同時發(fā)送上千個LongPolling的請求。
此時隊列中沒有消息,如果您再次發(fā)起LongPolling,消息服務MNS服務器就會返回:消息不存在。
因此,如果您是在一個While循環(huán)里不停的做LongPolling請求,而沒有做異常處理,會導致您發(fā)送了大量的請求,不能達到使用LongPolling的預期效果。
解決方案
當您打開上百個線程同時訪問消息服務MNS服務器時,如果隊列里已經沒有消息,就不需要上百個線程同時運行LongPolling。此時只需要打開1~N個線程運行LongPolling。當運行LongPolling的線程發(fā)現隊列里有消息時,喚醒其他線程一起接收消息,達到快速響應的目的。
長輪詢示例代碼是一個使用MessageReceiver獲取消息的最佳實踐。所有獲取消息的線程都新建了MessageReceiver,使用receiver.receiveMessage來獲取消息。
MessageReceiver內部做了LongPolling的排他機制,只要有一個線程在做LongPolling,其它線程就需要等待。
心靈雞湯:
標題:阿里云賬號注冊,阿里云代理商代購
地址:http://www.nickbaillie.com/kfxw/64307.html