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

【已解決】webman reload 平滑重啟,導致 redis 消費者進程正在處理的消息丟失

oliver.

問題描述

項目發(fā)版執(zhí)行 php start.php reload 重啟服務時,如果 redis 消費者進程正在處理消息,會導致這些消息丟失。
請問各位大佬,在不改 webman/redis-queue 插件源碼的情況下,有辦法解決這個問題嗎?還是說只能換專業(yè)的 MQTT 服務了?

消費者進程的演示代碼

<?php

namespace app\queue\redis;

use support\Log;
use Webman\RedisQueue\Consumer;

class TestConsume implements Consumer
{
    public $queue = 'test-consume';

    public $connection = 'default';

    public function consume($data)
    {
        Log::info('@@@@@@@start');
        for ($i = 0;$i < 10;$i++) {
            sleep(1);
        }
        Log::info('@@@@@@@end');
    }
}

重現(xiàn)問題的步驟

  • 投遞消息
    Redis::send('test-consume', []);
  • 監(jiān)控日志文件
    tail -f runtime/logs/webman-2025-01-09.log
    #輸出
    [2025-01-09 09:54:33] default.INFO: @@@@@@@start [] []
  • 在消費者進程執(zhí)行過程中,重啟 webman 服務
    php start.php reload
  • 我原本預期 webman 服務平滑重啟時,會將消費者進程執(zhí)行一半的消息重入隊列,重啟完成后,這些消息將再次被執(zhí)行,但測試驗證結果并非如此(項目的日志文件沒有執(zhí)行日志)。

操作系統(tǒng)環(huán)境及workerman/webman等具體版本

Linux CentOS 7
PHP 8.2.22
Webman-framework v1.5.24
webman/redis-queue v1.3.2
Redis Version: 7.0.11

1046 5 0
5個回答

zz1000

文檔不是有嗎 配置進程退出的等待時間

  • oliver. 2025-01-09

    感謝您的回復。盡管這并不能完全解決消息丟失的問題,但只要將退出等待時間設置得足夠長,還是可以在很大程度上避免出現(xiàn)這個問題的。

nitron

對消息丟失有強要求就使用正兒八經的消息隊列

  • 暫無評論
chaz6chez

webman插件:
rabbitmq http://wtbis.cn/plugin/67
redis-stream http://wtbis.cn/plugin/69

workerman組件:
rabbitmq http://wtbis.cn/doc/workerman/components/workerman-rabbitmq.html
mqtt http://wtbis.cn/doc/workerman/components/workerman-mqtt.html

以上都支持ack機制,防止丟失數(shù)據(jù)

qqxxr

也可以單獨開一個消費隊列出來,不同于你的api項目上。這樣頻繁更新代碼,不影響你消費者服務

  • 暫無評論
釋永戰(zhàn)

我都是另外開一個隊列work實例服務來執(zhí)行的

  • oliver. 2025-01-10

    你是基于 workerman/redis-queue 組件,自定義了一個命令創(chuàng)建 work 實例并訂閱消費 redis 隊列消息么

  • nitron 2025-01-10

    他意思是,再開一個完整的項目只進行消費吧

  • 釋永戰(zhàn) 2025-01-10

    對的,另外開了一個項目只進行消費業(yè)務

  • oliver. 2025-01-11

    那同一個項目不得維護兩套相同的代碼,除非消費者程序沒有引用 API 項目的功能模塊

  • 小白同學丶 2025-01-14

    怎么能用2套相同代碼。 你單獨處理隊列任務就可以了吧。。

    以前我們用workerman做游戲時候。4套代碼。。都不一樣,任務也不一樣。 如果非要一樣的話。 那頂多重???

??