workerman-mqtt版本
{
"name" : "workerman/mqtt",
"type" : "library",
"homepage": "http://www.wtbis.cn",
"license" : "MIT",
"require": {
"workerman/workerman" : ">=3.3.0"
},
"autoload": {
"psr-4": {"Workerman\\Mqtt\\": "./src"}
}
}
運(yùn)行暫無(wú)問(wèn)題,就是運(yùn)行了有好大半年了,突然發(fā)現(xiàn)有一部分?jǐn)?shù)據(jù)未收到;服務(wù)端和訂閱端都是QOS=2
訂閱端代碼
use Workerman\Worker;
$worker = new Worker();
$worker->onWorkerStart = function () {
$options = ['client_id' => 'xxx', 'reconnect_period' => 1, 'username' => 'xxx', 'password' => 'xxx', 'debug' => false];
$mqtt = new Workerman\Mqtt\Client(MQTT_ADDR, $options);
$mqtt->onConnect = function ($mqtt) {
do_log('Connected to MQTT broker');
$mqtt->subscribe('topic', ['qos' => 2]);
};
$mqtt->onMessage = function ($topic, $content) {
do_log('開(kāi)始處理消息');
procMsg($topic, $content);
};
$mqtt->connect();
};
Worker::runAll();
function procMsg($topic, $msg)
{
do_log('msg: ' . $msg);
// 做了一點(diǎn)業(yè)務(wù): 將消息數(shù)據(jù)插入到表里
// 這里可能有點(diǎn)問(wèn)題,因?yàn)樽约簩懙氖敲看味糿ew一個(gè)PDO,現(xiàn)在準(zhǔn)備改掉,但是不知道是否和這個(gè)有關(guān)
}
也沒(méi)報(bào)錯(cuò)也沒(méi)啥異常;對(duì)方也有一臺(tái)機(jī)器也是訂閱的,但是他們有數(shù)據(jù),我這沒(méi)數(shù)據(jù),也不知道是不是有這種"多個(gè)訂閱方同時(shí)訂閱同一個(gè)主題時(shí),某個(gè)訂閱方可能會(huì)丟失消息"的問(wèn)題,因?yàn)槲覀兌颊{(diào)整過(guò)都是
qos=2
,請(qǐng)大佬們指點(diǎn)下查找思路和解決思路
原因:
ps -ef | grep
的時(shí)候隨便填了個(gè)有點(diǎn)關(guān)系的關(guān)鍵字沒(méi)搜到全部進(jìn)程,沒(méi)有kill
掉全部的,再進(jìn)行重啟,導(dǎo)致部分進(jìn)程還在跑以前的代碼,導(dǎo)致一會(huì)日志記錄現(xiàn)在的內(nèi)容一會(huì)是記錄以前的內(nèi)容;- 處理消息業(yè)務(wù)部分,沒(méi)在意業(yè)務(wù)已經(jīng)換庫(kù)了(大半年沒(méi)改過(guò)了,忘了),把自己本地的鏈接覆蓋上去了,導(dǎo)致一直處于
SQLSTATE[HY000] [2002] Connection refused