項(xiàng)目發(fā)版執(zhí)行 php start.php reload 重啟服務(wù)時,如果 redis 消費(fèi)者進(jìn)程正在處理消息,會導(dǎo)致這些消息丟失。
請問各位大佬,在不改 webman/redis-queue 插件源碼的情況下,有辦法解決這個問題嗎?還是說只能換專業(yè)的 MQTT 服務(wù)了?
<?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');
}
}
Redis::send('test-consume', []);
tail -f runtime/logs/webman-2025-01-09.log
#輸出
[2025-01-09 09:54:33] default.INFO: @@@@@@@start [] []
php start.php reload
Linux CentOS 7
PHP 8.2.22
Webman-framework v1.5.24
webman/redis-queue v1.3.2
Redis Version: 7.0.11
webman插件:
rabbitmq http://m.wtbis.cn/plugin/67
redis-stream http://m.wtbis.cn/plugin/69
workerman組件:
rabbitmq http://m.wtbis.cn/doc/workerman/components/workerman-rabbitmq.html
mqtt http://m.wtbis.cn/doc/workerman/components/workerman-mqtt.html
以上都支持ack機(jī)制,防止丟失數(shù)據(jù)
我都是另外開一個隊(duì)列work實(shí)例服務(wù)來執(zhí)行的
你是基于 workerman/redis-queue 組件,自定義了一個命令創(chuàng)建 work 實(shí)例并訂閱消費(fèi) redis 隊(duì)列消息么
怎么能用2套相同代碼。 你單獨(dú)處理隊(duì)列任務(wù)就可以了吧。。
以前我們用workerman做游戲時候。4套代碼。。都不一樣,任務(wù)也不一樣。 如果非要一樣的話。 那頂多重?。?/p>