国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

給rabbitmq發(fā)送數據,前臺運行完全沒問題,但是一旦 -d 到后臺就不能發(fā)送出去了。mqtt不受影響,都正常

dorke

問題描述

給rabbitmq發(fā)送數據,前臺運行完全沒問題,但是一旦 -d 到后臺就不能發(fā)送出去了。

程序代碼或配置

<?php

use \Workerman\Worker;
use \Workerman\Mqtt\Client;
use \Workerman\Connection\AsyncTcpConnection;

require_once __DIR__ . '/../../vendor/autoload.php';
require_once __DIR__ . '/../common/common.php';
// require_once __DIR__ . '/../common/thinkorm.php';
// use Applications\App\WeightedCalGPS;
// use Applications\App\WiFiLocationEstimator;
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
global $exchangeName;
global $my_routing_key;
//創(chuàng)建連接和channel

$connection = new AMQPStreamConnection('127.0.0.1', 5672, 'tonghao', 'th@123.456','tonghao');
$channel = $connection->channel();
$queueName = 'StaffPositioning.DT';
$my_routing_key = 'StaffPositioning.PYDW';
//創(chuàng)建交換機
$exchangeName = 'StaffPositioning_Broadcast';
$channel->exchange_declare($exchangeName, 'topic',false,true,false);
//消息隊列
$channel->queue_bind($queueName, $exchangeName, $my_routing_key);

//worker數據
$worker = new Worker();
$worker->count = 1;

$worker->onWorkerStart = function ($worker)  use ($channel) {

    $mqtt_options = ['username' => 'admin', 'password' => 'public', 'debug' => false];
    $mqtt = new Workerman\Mqtt\Client('127.0.01:1883', $mqtt_options);    
    $mqtt->onConnect = function () use ($mqtt) {
        var_dump("work_mqtt ..........");
        $mqtt->subscribe('/test/+');
    };
    // 消息 定位工牌1-6是人員定位,7-10是卡車定位
    $mqtt->onMessage = function ($topic, $message)  use ($channel) {
        //echo $message;
        global $exchangeName;
        global $my_routing_key;        
        var_dump($message);
        var_dump('==========dddddddd=============');
        $data = json_decode($message,true);
        print_r($data);
        echo date("Y-m-d H:i:s ");
        $event = $data['event'];
        if($event == 'status'){
            $dev_id = $data['deviceId'];
            $type = $data['data']['type'];
            $time = $data['time'];
            $longitude = $latitude = '';
            $owner = isset($data['data']['owner'])?$data['data']['owner']:'';
            $height = isset($data['data']['height'])?$data['data']['height']:'';
            if(($owner == 'person') && ($type == 'gps') && ($data['data']['longitude']!='NULL') && ($data['data']['latitude']!='NULL')){
                $longitude = $data['data']['longitude'];
                $latitude = $data['data']['latitude'];
                //echo $longitude.'===='.$latitude;
            }elseif($type == 'lbs'){
                /*$ble_arr = [];
                $lbs_arr = $data['data']['ble'];
                if($lbs_arr){
                    foreach ($lbs_arr as $k=>$v){
                        $ble_arr[$v['id']]=$v;
                    }
                }
                //檢查周圍ble數據
                $ble_local = ib_lon_lat($ble_arr);
                if($ble_local){
                    //信號強度
                    $local = wifi_rssi($ble_local);
                    $longitude = $local['Longitude'];
                    $latitude = $local['Latitude'];
                }*/
            }else{
                return false;
            }
            // 創(chuàng)建消息////////////////////////
            if(($latitude && $longitude)&&($owner == 'person')){
                $messageData = [
                    'cardID'=>$dev_id,
                    'x'=>['latitude'=>$latitude,'longitude'=>$longitude,'height'=>$height,'update_time'=>$time]
                ];
                print_r($messageData);
                $message = new AMQPMessage(json_encode($messageData));
                // 發(fā)送消息到隊列
                $channel->basic_publish($message, $exchangeName, $my_routing_key);
                echo "消息已發(fā)送到隊列 :".$exchangeName;
            }
            /////////////////////////////////////////end
        }
    };
    // 關閉
    $mqtt->onClose = function () use ($mqtt) {
        var_dump("mqtt close");
        sleep(1);
        $mqtt->connect();
    };
    $mqtt->connect();

};
// 如果不是在根目錄啟動,則運行runAll方法
if (!defined('GLOBAL_START')) {
    Worker::runAll();
}

重現問題的步驟

1、mq上建立相應的路由和 queue

2、start 運行沒有問題,mq可以收到數據

3、start -d mq就完全沒有數據了

操作系統(tǒng)環(huán)境及workerman/webman等具體版本

centos7.9

Workerman[test_rabbitmq.php] start in DAEMON mode
------------ WORKERMAN --------------------
Workerman version:4.1.11          PHP version:7.4.33           
----------- WORKERS --------------
proto   user            worker          listen          processes    status           
tcp     root            none            none            1             [OK]            
-------------------------------------
Input "php test_rabbitmq.php stop" to stop. Start success.
736 1 0
1個回答

walkor 打賞

文檔有說,不能在腳本里直接初始化連接類的資源,包括數據庫、redis等。
所以

$connection = new AMQPStreamConnection('127.0.0.1', 5672, 'tonghao', 'th@123.456','tonghao');

應該放在onWorkerStart里初始化

  • dorke 2023-11-19

    收到,一針見血,測試沒有問題,確實這個問題,文檔還是看的少

年代過于久遠,無法發(fā)表回答
??