国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

【已解決】使用workerman/rabbitmq寫消費(fèi)者,捕獲到異常時(shí),無法正常消費(fèi)

dkou

問題描述

我希望的消費(fèi)者業(yè)務(wù)流程時(shí):

1)先從隊(duì)列拿一條信息出來,先處理(ack)掉,無論業(yè)務(wù)邏輯成不成功
2)信息放到處理業(yè)務(wù)程序去處理。

要問的問題

如果業(yè)務(wù)程序中途出現(xiàn)異常,或者程序中途kill掉,發(fā)現(xiàn)隊(duì)列中這條信息還在(或者ack不成功?)
如果進(jìn)程正常跑沒有異?;騥ill隊(duì)列的信息是能正常消費(fèi)的。

應(yīng)該怎么改才能滿足我的業(yè)務(wù)流程???????????

貼一下代碼希望大佬指點(diǎn)指點(diǎn)

截圖

備注:說說為啥要先處理信息

我的思路是,無論這條信息對(duì)應(yīng)的業(yè)務(wù)是否成功,消息都要處理,防止隊(duì)列數(shù)據(jù)一直卡著。如果業(yè)務(wù)處理不成功,我會(huì)重新向隊(duì)尾發(fā)送一條延時(shí)隊(duì)列,重新處理。

1173 3 1
3個(gè)回答

SillyDog

Bunny\Channel::consume 這個(gè)方法 有個(gè)noack 參數(shù) 默認(rèn)為 false 改為true 看看

  • dkou 2024-02-23

    試過了,設(shè)置true的話,只要中途進(jìn)程斷了,隊(duì)列里面所有信息都會(huì)清空了

owenzhang

不懂問下。你這個(gè)die()不會(huì)導(dǎo)致workerman退出嗎?

  • nitron 2024-02-23

    旁邊不是注釋"模擬捕獲異?;蜻M(jìn)程被kill"么

  • dkou 2024-02-24

    模擬異常

dkou

問題已自行解決

經(jīng)過查看github上的examples拿到頭緒,再次感謝walkor,examples上寫的比手冊(cè)詳細(xì)很多,而且每種模式都有寫的。

問題的關(guān)鍵:

通過自己調(diào)試發(fā)現(xiàn),上述寫法是流程是,先把隊(duì)列信息批量取出來,處理,然后再一次性ack的,即假設(shè)隊(duì)列有10條信息,會(huì)看到10條信息狀態(tài)會(huì)先變成Unacked,等10條信息對(duì)也業(yè)務(wù)邏輯完,這10條信息才會(huì)消失。
因此,如果我在處理第3條時(shí)die()了,其實(shí)前2條隊(duì)列信息是還沒收到ack的,所以隊(duì)列信息還在。
而我的要求,是要逐條信息處理,每條信息處理完就ack的,因此,應(yīng)該要設(shè)置每次批量獲取信息的數(shù)量,設(shè)置為1。以下是代碼
截圖

題外話

經(jīng)指點(diǎn),我這種“無論這條信息對(duì)應(yīng)的業(yè)務(wù)是否成功,消息都要處理,防止隊(duì)列數(shù)據(jù)一直卡著。如果業(yè)務(wù)處理不成功,我會(huì)重新向隊(duì)尾發(fā)送一條延時(shí)隊(duì)列,重新處理。”處理方式在rabbitmq其實(shí)沒必要的,因?yàn)楸緛砭陀衋ck機(jī)制,unacked的隊(duì)列,會(huì)自己回到reday,不會(huì)被刪除。因?yàn)橐郧笆褂胷edis做隊(duì)列留下的思維。

  • 暫無評(píng)論
年代過于久遠(yuǎn),無法發(fā)表回答
??