中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php中怎么使用簡單可靠的rabbitmq組件包

發布時間:2021-07-02 16:15:40 來源:億速云 閱讀:109 作者:chen 欄目:編程語言

本篇內容介紹了“php中怎么使用簡單可靠的rabbitmq組件包”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

在項目中rabbitmq得到了廣泛的時候,這里對rabbitmq的常規功能做了一個簡單的總結,并封裝成了composer包,composer包地址、github地址,歡迎fork,由于水平有限,難免存在bug,歡迎提出寶貴意見。

easy-rabbitmq 包簡介

對php-amqplib/php-amqplib包的二次封裝,為常見功能提供一套開箱即用的生產解決方案。目前支持的功能列表如下:

  • 推送消息到直連交換機(含延遲消息)

  • 推送消息到扇形交換機(含延遲消息)

  • 推送消息到主題交換機(含延遲消息)

  • 訂閱模式下的可靠消費, 消費者消費失敗后將會嘗試繼續消費,最多嘗試5次。

  • 拉取模式下的可靠消費, 消費者消費失敗后將會嘗試繼續消費,最多嘗試5次。

如果還有其它場景,歡迎繼續補充,隨后進行迭代!!

要求

安裝包對PHP版本對要求主要取決于php-amqplib/php-amqplib包本身對要求,這里為了兼顧php5.0的使用者,我們使用了php-amqplib/php-amqplib包V2.9.0的版本。

具體的要求參照這里。

不過筆者推薦使用php7.0及其以上版本, 這個開發包也是在7.0這個版本上面開發完成的!

安裝

      composer require maweibinguo/easyrabbitmq

使用

在這里我們推薦php腳本+supervisor結合使用,用以保證消費進程的可靠性、增強worker的消費能力! 如果你還沒有聽說過supervisor,可以點擊這里了解.

1、推送消息

1-1、推送消息到直連交換機
      $config = [
          "host" => "127.0.0.1",
            "port" => "5672",
            "user" => "guest",
            "password" => "guest",
            "vhost" => "/",
            "channel_max_num" => 10,
      ];    
      $instance = RabbitMq::getInstance($config);
      
      //延遲消息,30 秒中后才會到達指定的交換機
      $instance->pushToDirect(
                        $msg = time(), //消息體內容
                        $exchange = "easy_direct_exchange", //交換機名稱
                        $routingKey = "direct_test_queue", //消息的routingKey,consume(get) 方法到bingdingKey 要和routingKey保持一致
                        $delaySec = 30 //延遲秒數
      );

      //無延遲,推入到指定到直鏈交換機
      $instance->pushToDirect(
                        $msg = time(), //消息體內容
                        $exchange = "easy_direct_exchange", //交換機名稱
                        $routingKey = "direct_test_queue", //消息的routingKey,consume(get) 方法到bingdingKey 要和routingKey保持一致
      );
1-2、推送消息到扇形交換機
      $config = [
          "host" => "127.0.0.1",
            "port" => "5672",
            "user" => "guest",
            "password" => "guest",
            "vhost" => "/",
            "channel_max_num" => 10,
      ];    
      $instance = RabbitMq::getInstance($config);
      
      //延遲消息,30 秒中后才會到達指定的交換機
      $instance->pushToFanout(
                        $msg = time(), //消息體內容
                        $exchange = "easy_fanout_exchange", //交換機名稱
                        $delaySec = 30 //延遲秒數
      );

      //無延遲,推入到指定到直鏈交換機
      $instance->pushToFanout(
                        $msg = time(), //消息體內容
                        $exchange = "easy_fanout_exchange" //交換機名稱
      );
1-3、推送消息到主題交換機
      $config = [
          "host" => "127.0.0.1",
            "port" => "5672",
            "user" => "guest",
            "password" => "guest",
            "vhost" => "/",
            "channel_max_num" => 10,
      ];    
      $instance = RabbitMq::getInstance($config);
      
      //延遲消息,30 秒中后才會到達指定的交換機
      $instance->pushToTopic(
                        $msg = time(), //消息體內容
                        $exchange = "easy_topic_exchange", //交換機名稱
                        /**
                         * routingKey 要同consum(get)方法的bindingKey相匹配
                         * bindingKey支持兩種特殊的字符"*"、“#”,用作模糊匹配, 其中"*"用于匹配一個單詞、“#”用于匹配多個單詞(也可以是0個)
                         * 無論是bindingKey還是routingKey, 被"."分隔開的每一段獨立的字符串就是一個單詞, easy.topic.queue, 包含三個單詞easy、topic、queue
                         */
                        $routingKey = "easy.topic.queue",
                        $delaySec = 30 //延遲秒數
      );

      //無延遲,推入到指定到直鏈交換機
      $instance->pushToTopic(
                        $msg = time(), //消息體內容
                        $exchange = "easy_topic_exchange", //交換機名稱
                        $routingKey = "easy.topic.queue"    
      );

2、消費消息

消費支持自動重試,最多嘗試重試5次,每次消費失敗后該消息將會被重新投入到消費隊列中。重新的時間將會隨著失敗的次數增多逐漸推移,本客戶端支持的推移策略如下:

失敗1次(1秒鐘后會再被投遞), 失敗2次(2秒鐘后會再被投遞), 失敗3次(4秒鐘后會再被投遞), 失敗4次(8秒鐘后會再被投遞), 失敗5次(16秒鐘后會再被投遞)

2-1、訂閱模式
訂閱模式下的可靠消費
      $config = [
          "host" => "127.0.0.1",
            "port" => "5672",
            "user" => "guest",
            "password" => "guest",
            "vhost" => "/",
            "channel_max_num" => 10,
      ];    
      $instance = RabbitMq::getInstance($config);
      $instance->consume(
            $queueName = "direct_test_queue",//訂閱的隊列名稱
            $consumerTag = "c1",//消費標記
            $exchange = "easy_direct_exchange",//交換機名稱
            $bindingKey = "direct_test_queue",//bindingkey,如果是直鏈交換機需要同routingKey保持一致
            $callback = function($msg){
                $body = $msg->body;
                file_put_contents("./test.log", "time => " . time() . "\t" . " body => " . $body . PHP_EOL , FILE_APPEND);
                //如果返回結果不絕對等于(===)true,那么將觸發消息重試機制
                return false;
            },
            //5次消費消費失敗后,失敗消息將會投遞到的隊列名稱
            $failedQueue = "easymq@failed"
      );
2-2、拉取模式
拉取模式下的可靠消費
      $config = [
          "host" => "127.0.0.1",
            "port" => "5672",
            "user" => "guest",
            "password" => "guest",
            "vhost" => "/",
            "channel_max_num" => 10,
      ];    
      $instance = RabbitMq::getInstance($config);
      $instance->get(
            $queue = "get_queue",
            $exchange = "easy_fanout_exchange",
            $bindingKey = "",
            $callback = function($msg){
                $body = $msg->body;
                file_put_contents("./test.log", "time => " . time() . "\t" . " body => " . $body . PHP_EOL , FILE_APPEND);
                //如果返回結果不絕對等于(===)true,那么將觸發消息重試機制
                return false;
            },
            //5次消費消費失敗后,失敗消息將會投遞到的隊列名稱
            $failedQueue = 'easymq@failed'
      );

“php中怎么使用簡單可靠的rabbitmq組件包”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

富顺县| 沙坪坝区| 德化县| 万载县| 南郑县| 策勒县| 吉木萨尔县| 洪洞县| 陆川县| 天水市| 盐城市| 平罗县| 阜南县| 阿拉善右旗| 梁平县| 四平市| 望江县| 甘肃省| 泽普县| 张家港市| 鄱阳县| 汕头市| 革吉县| 鲁甸县| 阜阳市| 八宿县| 扶沟县| 淮阳县| 新巴尔虎右旗| 礼泉县| 北辰区| 航空| 博湖县| 瑞丽市| 安化县| 南城县| 长子县| 康马县| 杭锦后旗| 金昌市| 遵义市|