rabbitMQ 消費隊列使用方法

我們  要消費 Queues  下    Virtual host  名稱爲cloud_platform   隊列name爲 biz_cloud_info   

這個時候 需要程序裏面設置消費隊列的基本信息    host  ,port  user  還有password  vhost  例如

'mq' => [
    'host' => '0.0.0.0',
    'port' => '5672',
    'user' => 'crmtest',
    'password' => '123321',
    'vhost' => 'crmtest'
],

還需要設置是那個隊列

//交付信息同步隊列
'read_biz_cloud' => [
    'exchange_name' => 'ex_cloud_platform',        那個通道
    'queue_name' => 'biz_cloud_info',              隊列名稱
    'route_key' => 'rk_biz_cloud_info',
    'consumer_tag' => ''
],

 

當然這些信息都是要放到config.php裏面

 

<?php
require_once 'vendor/autoload.php';
require_once 'common/mq.php';
require_once 'common/redis.php';
$config=require_once "config.php";
$handle=new mq();
$handle->connect(array_merge($config['mq'],$config['read_biz_cloud']));
$process = function ($msg) {
    $msgArr = json_decode($msg->body, true);
    //---------------+8商標-----------------------------------
    if ($msgArr['q_type'] == 'biz_userbrandinfo') {
        require_once 'lib/biz_userbrandinfo.php';
        $m= new biz_userbrandinfo();
        if($m->handle($msgArr['q_data'],$msgArr['q_id'])){
            echo 'biz_userbrandinfo ['.$msgArr['q_id'].']['.date('Y-m-d H:i:s').']同步成功'."\n";
            redisLog('rabbitmq_queue同步成功[biz_userbrandinfo]:'.$msg->body);
            $pid=isset($msgArr['q_data']['PID'])?$msgArr['q_data']['PID']:'null';
            redisLog('rabbitmq_queue同步成功[q_id]:'.$msgArr['q_id']);
            $m->sync_queue_log($pid,$msgArr['q_id'],'1','1',date('Y-m-d H:i:s'));
        }else{
            echo 'biz_userbrandinfo ['.$msgArr['q_id'].']['.date('Y-m-d H:i:s').']同步失敗'."\n";
            redisLog('rabbitmq_queue同步失敗[biz_userbrandinfo]:'.$msg->body);
            $pid=isset($msgArr['q_data']['PID'])?$msgArr['q_data']['PID']:'null';
            redisLog('rabbitmq_queue同步失敗[q_id]:'.$msgArr['q_id']);
            $m->sync_queue_log($pid,$msgArr['q_id'],'1','0',date('Y-m-d H:i:s'));
            $m->handle_error($msgArr);
        }
    }
    //---------------商標流程-----------------------------------
    if ($msgArr['q_type'] == 'order_sync_biz') {
        require_once 'lib/order_sync_biz.php';
        $m= new order_sync_biz();
        if($m->handle($msgArr['q_data'],$msgArr['q_id'])){
            echo 'order_sync_biz ['.$msgArr['q_id'].']['.date('Y-m-d H:i:s').']同步成功'."\n";
            redisLog('rabbitmq_queue同步成功[order_sync_biz]:'.$msg->body);
            $pid=isset($msgArr['q_data']['PID'])?$msgArr['q_data']['PID']:'null';
            redisLog('rabbitmq_queue同步成功[q_id]:'.$msgArr['q_id']);
            $m->sync_queue_log($pid,$msgArr['q_id'],'4','1',date('Y-m-d H:i:s'));
        }else{
            echo 'order_sync_biz ['.$msgArr['q_id'].']['.date('Y-m-d H:i:s').']同步失敗'."\n";
            redisLog('rabbitmq_queue同步失敗[order_sync_biz]:'.$msg->body);
            $pid=isset($msgArr['q_data']['PID'])?$msgArr['q_data']['PID']:'null';
            redisLog('rabbitmq_queue同步失敗[q_id]:'.$msgArr['q_id']);
            $m->sync_queue_log($pid,$msgArr['q_id'],'4','0',date('Y-m-d H:i:s'));
            $m->handle_error($msgArr);
        }
    }
    //-----------------------版權--------------------------------------
    if ($msgArr['q_type'] == 'biz_usercopyrightinfo') {
        require_once 'lib/biz_usercopyrightinfo.php';
        $m=new biz_usercopyrightinfo();
        if($m->handle($msgArr['q_data'])){
            echo 'biz_usercopyrightinfo['.$msgArr['q_id'].']['.date('Y-m-d H:i:s').']同步成功'."\n";
            redisLog('rabbitmq_queue同步成功[biz_usercopyrightinfo]:'.$msg->body);
            $pid=isset($msgArr['q_data']['PID'])?$msgArr['q_data']['PID']:'null';
            redisLog('rabbitmq_queue同步成功[q_id]:'.$msgArr['q_id']);
            $m->sync_queue_log($pid,$msgArr['q_id'],'2','1',date('Y-m-d H:i:s'));
        }else{
            echo 'biz_usercopyrightinfo['.$msgArr['q_id'].']['.date('Y-m-d H:i:s').']同步失敗'."\n";
            redisLog('rabbitmq_queue同步失敗[biz_usercopyrightinfo]:'.$msg->body);
            $pid=isset($msgArr['q_data']['PID'])?$msgArr['q_data']['PID']:'null';
            redisLog('rabbitmq_queue同步失敗[q_id]:'.$msgArr['q_id']);
            $m->sync_queue_log($pid,$msgArr['q_id'],'2','0',date('Y-m-d H:i:s'));
            $m->handle_error($msgArr);
        }
    }
    //--------------------------專利---------------------------------
    if ($msgArr['q_type'] == 'biz_userpatentinfo') {
        require_once 'lib/biz_userpatentinfo.php';
        $m=new biz_userpatentinfo();
        if($m->handle($msgArr['q_data'])){
            echo 'biz_userpatentinfo['.$msgArr['q_id'].']['.date('Y-m-d H:i:s').']同步成功'."\n";
            redisLog('rabbitmq_queue同步成功[biz_userpatentinfo]:'.$msg->body);
            $pid=isset($msgArr['q_data']['PID'])?$msgArr['q_data']['PID']:'null';
            redisLog('rabbitmq_queue同步成功[q_id]:'.$msgArr['q_id']);
            $m->sync_queue_log($pid,$msgArr['q_id'],'3','1',date('Y-m-d H:i:s'));
        }else{
            echo 'biz_userpatentinfo['.$msgArr['q_id'].']['.date('Y-m-d H:i:s').']同步失敗'."\n";
            redisLog('rabbitmq_queue同步失敗[biz_userpatentinfo]:'.$msg->body);
            $pid=isset($msgArr['q_data']['PID'])?$msgArr['q_data']['PID']:'null';
            redisLog('rabbitmq_queue同步失敗[q_id]:'.$msgArr['q_id']);
            $m->sync_queue_log($pid,$msgArr['q_id'],'3','0',date('Y-m-d H:i:s'));
            $m->handle_error($msgArr);
        }
    }
    //--------------------------更新狀態---------------------------------
    if ($msgArr['q_type'] == 'CloudProcessStatusInfo') {
        require_once 'lib/cloud_biz_info.php';
        $m= new cloud_biz_info();
        if($m->handle($msgArr['q_data'],$msgArr['q_id'])){
            echo 'CloudProcessStatusInfo ['.$msgArr['q_id'].']['.date('Y-m-d H:i:s').']同步成功'."\n";
            redisLog('rabbitmq_queue同步成功[CloudProcessStatusInfo]:'.$msg->body);
            $pid=isset($msgArr['q_data']['PID'])?$msgArr['q_data']['PID']:'null';
            redisLog('rabbitmq_queue同步成功[q_id]:'.$msgArr['q_id']);
            $m->sync_queue_log($pid,$msgArr['q_id'],'5','1',date('Y-m-d H:i:s'));
        }else{
            echo 'CloudProcessStatusInfo ['.$msgArr['q_id'].']['.date('Y-m-d H:i:s').']同步失敗'."\n";
            redisLog('rabbitmq_queue同步失敗[CloudProcessStatusInfo]:'.$msg->body);
            $pid=isset($msgArr['q_data']['PID'])?$msgArr['q_data']['PID']:'null';
            redisLog('rabbitmq_queue同步失敗[q_id]:'.$msgArr['q_id']);
            $m->sync_queue_log($pid,$msgArr['q_id'],'5','0',date('Y-m-d H:i:s'));
            $m->handle_error($msgArr);
        }
    }
    //---------------處理過程-----------------------------------

    if ($msgArr['q_type'] == 'biz_cloudfileconfirm'){

        require_once 'lib/biz_confirm.php';
        $m= new biz_confirm();

        if($m->handle($msgArr['q_data'],$msg->body)){

            echo 'biz_confirm ['.$msgArr['q_id'].']['.date('Y-m-d H:i:s').']同步成功'."\n";
            redisLog('rabbitmq_queue同步成功[biz_confirm]:'.$msg->body);

        }else{

            echo 'biz_confirm ['.$msgArr['q_id'].']['.date('Y-m-d H:i:s').']同步失敗'."\n";
            redisLog('rabbitmq_queue同步失敗[biz_confirm]:'.$msg->body);
            $m->handle_error($msgArr);

        }

    }
    $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);

    //-----------------------------------------------------------
//    die;
};


$handle->consume($process);

這東西 如果要測試 ,同時不消耗的話, 就把$msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);  註釋掉, 同時die;y一下。

 

需要注意的主要事情就是  有些消息一進來就  “Unacked”    我只會一種方式處裏

 

查看  Consumers  下有幾個消費者 ,一一點進去  

點擊 Details 下的Connection IP進去   下拉點擊  按鈕  force close

 

自己留下痕跡 ,自己用, 別人看不懂 概不負責

發佈了32 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章