當連線失敗,celery會自動重試傳送訊息,我們可以對重試行為進行設定,譬如說多久重試一次、最大重試次數或者乾脆不重試!
當然這只是官方文件說的,我在windows上進行測試,故意設定了區域網中沒有使用的ip位址作為broker的位址,本來以為會像文件中講的那樣,在重試3次後返回並提示錯誤,結果死活不返回;檢視配置文件,找了各種配置項進行修改,都是這樣,後來在linux下面執行就正常了!感覺celery在windows下執行真的好多坑啊!
from celery import celery
backend='amqp://agent:agent@*.*.*.*:5672',
broker='amqp://agent:agent@*.*.*.*:5672')
def add(x, y):
return x + y
if __name__ == '__main__':
'max_retries': 3,
'interval_start': 0,
'interval_step': 0.2,
'interval_max': 0.2,
})
通過快捷鍵退出程式後,可以看到如下輸出,明顯是阻塞在和broker的tcp連線上了,而且超時時間肯定巨長或者是無限等待
callback)
file "e:\python34\lib\site-packages\kombu\utils\functional.py", line 333, in
etry_over_time
return fun(*args, **kwargs)
file "e:\python34\lib\site-packages\kombu\connection.py", line 261, in connec
return self.connection
file "e:\python34\lib\site-packages\kombu\connection.py", line 802, in connec
ion self._connection = self._establish_connection()
file "e:\python34\lib\site-packages\kombu\connection.py", line 757, in _estab
ish_connection
conn = self.transport.establish_connection()
file "e:\python34\lib\site-packages\kombu\transport\pyamqp.py", line 130, in
stablish_connection
conn.connect()
file "e:\python34\lib\site-packages\amqp\connection.py", line 282, in connect
self.transport.connect()
file "e:\python34\lib\site-packages\amqp\transport.py", line 109, in connect
self._connect(self.host, self.port, self.connect_timeout)
file "e:\python34\lib\site-packages\amqp\transport.py", line 150, in _connect
self.sock.connect(sa)
keyboardinterrupt
RocketMq 訊息重試
順序訊息的重試 對於順序訊息,當消費者消費訊息失敗後,訊息佇列 rocketmq 會自動不斷進行訊息重試 每次間隔時間為 1 秒 這時,應用會出現訊息消費被阻塞的情況。因此,在使用順序訊息時,務必保證應用能夠及時監控並處理消費失敗的情況,避免阻塞現象的發生。defaultmqpushconsumer...
非同步通訊rabbitmq 訊息重試
目標 利用rabbitmq實現訊息重試和失敗處理,實現可靠的消費消費。在訊息消費異常時,自動延時將訊息重試,當重試超過一定次數後,則列為異常訊息,等待後續特殊處理。準備 ttl time to live,通過給訊息 佇列設定過期時間 單位 毫秒 來控制訊息 佇列的生命週期。在達到時間後,訊息會變成d...
重試訊息的處理機制
一般情況下我們在實際生產中是不需要重試16次,這樣既浪費時間又浪費效能,理論上當嘗試重複次數達到我們想要的結果時如果還是消費失敗,那麼我們需要將對應的訊息進行記錄,並且結束重複嘗試 consumer.registermessagelistener messagelistenerconcurrentl...