我在webman中自定義進程使用rabbitmq 的消費者 阻塞消費 導(dǎo)致進程busy問題 是否有啥好辦法解決,如果沒有, 那這個busy是否對系統(tǒng)會有影響?
消費端代碼
$this->channel->basic_consume(
$queue,
'',
false,
false,
false,
false,
$callback
);
register_shutdown_function(function(){
$this->close();
});
$this->channel->consume();//這家伙會阻塞 內(nèi)部有while代碼導(dǎo)致的
我使用 status 查看 進程一直是busy狀態(tài) 監(jiān)控不到內(nèi)存等信息 N/A 不知道是否會有影響?
感覺stop的時候有影響,死循環(huán)stop的時候是被強制kill掉的,業(yè)務(wù)可能處理一半被kill掉。
while循環(huán)改成定時器感覺可行
改成定時器 會報錯 而且這種改成定時器 主動去取 rabbitmq 強烈不建議這么做 我覺得如果沒啥影響 應(yīng)該可以用 我監(jiān)控cpu 和 內(nèi)存 非常低 基本忽略不計 壓力測試也沒發(fā)現(xiàn)任何問題
stop 的時候 kill掉正常 現(xiàn)在增加了這段代碼 stop的時候不報錯了 pcntl_signal(SIGINT, function(){
Worker::stopAll();
});
就是stop的時候進程可能被kill掉,業(yè)務(wù)執(zhí)行一半,其它感覺沒影響。
看到 workerman 有rabbitmq客戶端啊
http://m.wtbis.cn/doc/workerman/components/workerman-rabbitmq.html
這個沒用過 我用的 php-amqplib/php-amqplib 做的入隊和消費 ,消費肯定是長連接 入隊也是都實現(xiàn)了就是現(xiàn)在 進程busy別的都OK了