Heim  >  Artikel  >  Backend-Entwicklung  >  Gemeinsame Funktionskapselung von Rabbitmq (PHP-Version)

Gemeinsame Funktionskapselung von Rabbitmq (PHP-Version)

藏色散人
藏色散人nach vorne
2021-04-12 11:44:333257Durchsuche

Dieser Artikel stellt die allgemeine Funktionskapselung von Rabbitmq (PHP-Version) vor. Freunde, die ihn benötigen, können darauf zurückgreifen.

Wenn Rabbitmq im Projekt weit verbreitet ist, finden Sie hier eine einfache Zusammenfassung der allgemeinen Funktionen von RabbitMq, gekapselt in ein Composer-Paket, Composer-Paketadresse (https://packagist.org/packages/maweibinguo/easyrabbitmq) , Github-Adresse (https://github.com/maweibinguo/easyrabbitmq), Sie können gerne forken. Aufgrund des begrenzten Niveaus wird es zwangsläufig zu Fehlern kommen. Sie können gerne Ihre wertvolle Meinung abgeben

[Empfohlenes Lernen: PHP Video-Tutorial]

Einführung in das easy-rabbitmq-Paket

Sekundäre Kapselung des Pakets php-amqplib/php-amqplib, Bereitstellung einer Reihe sofort einsatzbereiter Produktionslösungen für allgemeine Funktionen
. Die Liste der derzeit unterstützten Funktionen lautet wie folgt:

  • Push-Nachrichten an Direktschalter (einschließlich verzögerter Nachrichten)
  • Push-Nachrichten an Sektorschalter (einschließlich verzögerter Nachrichten)
  • Push-Nachrichten an Themenschalter (einschließlich verzögerter Nachrichten)
  • Unter Abonnementmodus Zuverlässiger Verbrauch, Verbraucher versuchen, den Verbrauch nach einem Fehler fortzusetzen, bis zu 5 Versuche.
  • Zuverlässiger Verbrauch im Pull-Modus, Verbraucher versuchen, den Verbrauch nach einem Fehler fortzusetzen, bis zu 5 Versuche.

Wenn es weitere Szenen gibt, fügen Sie diese bitte später hinzu und wiederholen Sie sie! !

Anforderungen

  • Die PHP-Versionsanforderungen des Installationspakets hängen hauptsächlich von den Anforderungen des php-amqplib/php-amqplib-Pakets selbst ab. Um den Benutzern von php5.0 Rechnung zu tragen, verwenden wir php-amqplib /php-amqplib-Paket V2.9.0-Version.
    Spezifische Anforderungen finden Sie hier (https://packagist.org/packages/php-amqplib/php-amqplib#v2.9.0).
    Der Autor empfiehlt jedoch die Verwendung von PHP7.0 und höher. Dieses Entwicklungspaket wurde auch auf Version 7.0 entwickelt!

Installation

      composer require maweibinguo/easyrabbitmq

Verwendung

Hier empfehlen wir die Kombination aus PHP-Skript + Supervisor, um die Zuverlässigkeit des Konsumprozesses sicherzustellen und die Konsumfähigkeit der Mitarbeiter zu verbessern! Wenn Sie noch nie von Supervisor gehört haben, können Sie hier klicken (http://www.supervisord.org/introduction.html), um mehr darüber zu erfahren.

1 Push-Nachricht an Direkt- Verbundener Switch

      $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. Push-Nachrichten an den Themenschalter

      $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" //交换机名称
      );

2. Der Verbrauch unterstützt automatische Wiederholungsversuche Nach jedem Verbrauchsfehler wird eine Nachricht gesendet und wieder in die Verbrauchswarteschlange gestellt. Die Wiederholungszeit vergeht schrittweise, wenn die Anzahl der Fehler zunimmt. Die von diesem Client unterstützten Verschiebungsstrategien sind wie folgt:

Einmaliger Fehler (nach 1 Sekunde wird erneut zugestellt), zweimaliger Fehler (nach 2 Sekunden wird erneut zugestellt). Sekunden) ), 3 Mal fehlgeschlagen (wird nach 4 Sekunden erneut zugestellt), 4 Mal fehlgeschlagen (wird nach 8 Sekunden erneut zugestellt), 5 Mal fehlgeschlagen (wird nach 16 Sekunden erneut zugestellt)

2-1

Zuverlässiger Verbrauch im Abonnementmodus

      $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-2, Pull-Modus

Zuverlässiger Verbrauch im Pull-Modus

      $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"
      );

Das obige ist der detaillierte Inhalt vonGemeinsame Funktionskapselung von Rabbitmq (PHP-Version). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen