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

redis-queue 隊(duì)列插件能不能主動(dòng)拋出異常?

kspade

http://wtbis.cn/plugin/12
下面是webman 官方插件的一些說(shuō)明:

消費(fèi)失敗重試
如果消費(fèi)失敗(發(fā)生了異常),則消息會(huì)放入延遲隊(duì)列,等待下次重試。重試次數(shù)通過(guò)參數(shù) max_attempts 控制,重試間隔由
retry_seconds 和 max_attempts共同控制。比如max_attempts為5,retry_seconds為10,第1次重試間隔為1*10秒,第2次重試時(shí)間間隔為 2*10秒,第3次重試時(shí)間間隔為3*10秒,以此類推直到重試5次。如果超過(guò)了max_attempts設(shè)置測(cè)重試次數(shù),則消息放入key為{redis-queue}-failed的失敗隊(duì)列。

注意
消費(fèi)過(guò)程中沒(méi)有拋出異常視為消費(fèi)成功,否則消費(fèi)失敗,進(jìn)入重試隊(duì)列

問(wèn)題

因?yàn)閞edis沒(méi)有ack 模式,
1.能否故意把某個(gè)隊(duì)列拋出為異常(目的是為了丟進(jìn)重試隊(duì)列)
2.又或者能不能主動(dòng)把某條隊(duì)列丟入重試隊(duì)列

原因

因?yàn)槲业年?duì)列消費(fèi)時(shí)的工作場(chǎng)景為:curl 攜帶XX參數(shù),訪問(wèn)一個(gè)異步通知地址,當(dāng)整個(gè)地址返回的內(nèi)容為:success 代表消費(fèi)成功,否則丟入重試隊(duì)列(xx秒后重試 - 一共重試5次)

rabbitmq 的stomp是符合我的使用場(chǎng)景的,搞了兩天了都沒(méi)搞定這玩意 太難了!
什么都搞好了,投遞消息就提示:Stomp client: not_found
放棄了 搞redis-queue

2053 4 0
4個(gè)回答

2548a

使用 throw new \Exception();不就好了嗎

  • kspade 2022-05-22

    public function consume 里面 怎么使用哦

  • 2548a 2022-05-22

    判斷返回地址,不符合要求就調(diào)用 throw new \Exception('xx不符合,重試'); 就完了,這句話就是手動(dòng)拋異常的.這樣它就會(huì)判斷隊(duì)列執(zhí)行失敗,等會(huì)就會(huì)再重新執(zhí)行了

  • kspade 2022-05-22

    我試了一下并不行,產(chǎn)生一堆垃圾信息

    0 /log/webman/vendor/workerman/redis-queue/src/Client.php(218): app\queue\redis\MyMailSend->consume()

    1 /log/webman/vendor/workerman/redis/src/Client.php(422): Workerman\RedisQueue\Client->Workerman\RedisQueue{closure}()

    2 /log/webman/vendor/workerman/workerman/Connection/TcpConnection.php(638): Workerman\Redis\Client->Workerman\Redis{closure}()

    3 [internal function]: Workerman\Connection\TcpConnection->baseRead()

    4 /log/webman/vendor/workerman/workerman/Events/Event.php(193): EventBase->loop()

    5 /log/webman/vendor/workerman/workerman/Worker.php(2435): Workerman\Events\Event->loop()

    6 /log/webman/vendor/workerman/workerman/Worker.php(1555): Workerman\Worker->run()

    7 /log/webman/vendor/workerman/workerman/Worker.php(1397): Workerman\Worker::forkOneWorkerForLinux()

    8 /log/webman/vendor/workerman/workerman/Worker.php(1371): Workerman\Worker::forkWorkersForLinux()

    9 /log/webman/vendor/workerman/workerman/Worker.php(1692): Workerman\Worker::forkWorkers()

    10 /log/webman/vendor/workerman/workerman/Worker.php(1641): Workerman\Worker::monitorWorkersForLinux()

    11 /log/webman/vendor/workerman/workerman/Worker.php(551): Workerman\Worker::monitorWorkers()

    12 /log/webman/start.php(108): Workerman\Worker::runAll()

  • damao 2022-05-23

    可以的,如果發(fā)生異常會(huì)顯示異常包括調(diào)用棧,然后自動(dòng)扔到重試隊(duì)列里。你貼的這個(gè)就是顯示的異常信息

nitron

我給個(gè)思路吧,也是現(xiàn)在在用的,不使用提供的失敗隊(duì)列,沒(méi)有得到需要的結(jié)果重新將任務(wù)發(fā)送到隊(duì)列內(nèi),如果執(zhí)行有異常則catch住后重新將任務(wù)發(fā)送到隊(duì)列內(nèi),自己記數(shù),超過(guò)了設(shè)定的次數(shù)都未得到需要的結(jié)果則丟棄(即不再送入隊(duì)列),同時(shí)記錄日志,通知系統(tǒng)有處理失敗的任務(wù)

  • 暫無(wú)評(píng)論
yzh52521
 // 隊(duì)列名
    public $queue = '/topic/send_mail';

    // 連接名,對(duì)應(yīng) config/redis_queue.php 里的連接`
    public $connection = 'default';

    // 消費(fèi)
    public function consume($data)
    {
        // 無(wú)需反序列化
        //var_export($data); // 輸出 ['to' => 'tom@gmail.com', 'content' => 'hello']
        throw new \Exception('異常消息');
    }
  • 暫無(wú)評(píng)論
evilk

我現(xiàn)在的做法是:
1.
在消費(fèi)過(guò)程中,如果失敗了,則手動(dòng)拋出異常,讓該任務(wù)進(jìn)入原隊(duì)列,等待重新執(zhí)行

2.
如果最終超過(guò)重試次數(shù),則進(jìn)入失敗隊(duì)列

3.
為了防止失敗隊(duì)列中的任務(wù)堆積 和 監(jiān)控失敗的任務(wù)
在整個(gè)服務(wù)啟動(dòng)的時(shí)候,單獨(dú)起一個(gè)自定義進(jìn)程
在進(jìn)程啟動(dòng)的時(shí)候,開(kāi)啟一個(gè)定時(shí)器
每5秒(時(shí)間自定義,我目前設(shè)置的是每5秒執(zhí)行一次),從失敗隊(duì)列中,取出一個(gè)失敗的任務(wù)
把這個(gè)任務(wù)所有的數(shù)據(jù)(包括任務(wù)本身 和 異常堆棧),入庫(kù)(一個(gè)專門存放失敗任務(wù)的表)

4.
在后臺(tái),開(kāi)一個(gè)頁(yè)面,可以看到這個(gè)表里的數(shù)據(jù),也就是所有失敗的任務(wù)
在這個(gè)頁(yè)面,根據(jù)任務(wù)失敗的原因,可以選擇

  • 重新丟入原隊(duì)列執(zhí)行
  • 刪除該任務(wù)
  • 暫無(wú)評(píng)論
年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??