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

【已解決】webman reload 平滑重啟,導(dǎo)致 redis 消費(fèi)者進(jìn)程正在處理的消息丟失

oliver.

問題描述

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

消費(fèi)者進(jìn)程的演示代碼

<?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 [] []
  • 在消費(fèi)者進(jìn)程執(zhí)行過程中,重啟 webman 服務(wù)
    php start.php reload
  • 我原本預(yù)期 webman 服務(wù)平滑重啟時(shí),會(huì)將消費(fèi)者進(jìn)程執(zhí)行一半的消息重入隊(duì)列,重啟完成后,這些消息將再次被執(zhí)行,但測試驗(yàn)證結(jié)果并非如此(項(xiàng)目的日志文件沒有執(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

895 5 0
5個(gè)回答

zz1000

文檔不是有嗎 配置進(jìn)程退出的等待時(shí)間

  • oliver. 2025-01-09

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

nitron

對消息丟失有強(qiáng)要求就使用正兒八經(jīng)的消息隊(duì)列

  • 暫無評(píng)論
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機(jī)制,防止丟失數(shù)據(jù)

qqxxr

也可以單獨(dú)開一個(gè)消費(fèi)隊(duì)列出來,不同于你的api項(xiàng)目上。這樣頻繁更新代碼,不影響你消費(fèi)者服務(wù)

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

我都是另外開一個(gè)隊(duì)列work實(shí)例服務(wù)來執(zhí)行的

  • oliver. 2025-01-10

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

  • nitron 2025-01-10

    他意思是,再開一個(gè)完整的項(xiàng)目只進(jìn)行消費(fèi)吧

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

    對的,另外開了一個(gè)項(xiàng)目只進(jìn)行消費(fèi)業(yè)務(wù)

  • oliver. 2025-01-11

    那同一個(gè)項(xiàng)目不得維護(hù)兩套相同的代碼,除非消費(fèi)者程序沒有引用 API 項(xiàng)目的功能模塊

  • 小白同學(xué)丶 2025-01-14

    怎么能用2套相同代碼。 你單獨(dú)處理隊(duì)列任務(wù)就可以了吧。。

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

??