walkor / redis-queue

Message queue system written in PHP based on workerman and backed by Redis.
35 stars 8 forks source link

订阅方法增加消费失败的回调 #9

Closed lengqiuqiuqiu closed 6 months ago

lengqiuqiuqiu commented 6 months ago

当消费重试次数达到最大时执行失败回调,方便对该消息进行后续处理。

walkor commented 6 months ago

感谢PR, 设置重试失败是一个不错的功能,但是

$client->subscribe($cb1,$cb2);
$client->subscribe($cb1,$cb2);

这样的写法如果有多个订阅比较麻烦,并且只提供最大重试失败回调可能还不够,感觉应该添加一个每次消费失败触发的回调,并且提供上下文包括失败次数,异常,最大重试次数等,这样业务可以根据需要做不同的处理,更激进一点也可以允许在回调里更改数据和上下文:

$client->subscribe($cb);
$client->onConsumeFailure(function($subject, &$data, &$context){
    // $subjet是主题,$data是数据

    // $context 里包含如下信息
    $context['error']; // 异常信息
    $context['attempts']; //  已经重试次数,对应$package['attempts']
    $context['max_attempts']; // 系统允许最大重试次数,对应$this->_options['max_attempts']

});
lengqiuqiuqiu commented 6 months ago

谢谢walkor回复,消费失败回调已经改成了onConsumeFailure形式,看看有没有什么问题