為了提高API的并發(fā)能力,我將一個文章接口的請求增加閱讀量views字段的工作放進(jìn)了消息隊列中。
但有時進(jìn)行代碼的更迭的時候,redis-queue的隊列還沒有完成消費,就會變?yōu)閒ailed放進(jìn)同一個key中,之后消費就會卡住,這個key中后面會追加到無限大。
有什么辦法可以避免這種情況?
// queue
class ViewsUpdateSend implements Consumer
{
// 要消費的隊列名
public $queue = 'zrViews';
// 連接名,對應(yīng) plugin/webman/redis-queue/redis.php 里的連接`
public $connection = 'default';
// 消費
public function consume($data)
{
// 獲取ID
$id = explode(',', base64_decode($data))[0];
// 增加瀏覽量
Article::find($id)->increment('views');
}
}
// 控制器
//判斷文章是否存在
if (!$article) {
$data = json_encode([
'code' => 0,
'msg' => '暫無內(nèi)容',
]);
} else {
Client::send('zrViews', $i);
失敗會有日志,從{redis-queue}-failed取出來幾條看下日志,不會無緣無故失敗,失敗原因找到解決就好了吧。
你日志都沒貼出來