PHP에서 간단하고 안정적인 Rabbitmq 구성 요소 패키지를 사용하는 방법

醉折花枝作酒筹
풀어 주다: 2023-03-11 07:58:01
앞으로
2123명이 탐색했습니다.

rabbitmq가 프로젝트에서 널리 사용될 때, Rabbitmq의 일반적인 기능에 대한 간단한 요약이 있으며, 작곡가 패키지 주소, github 주소로 캡슐화되어 있습니다. 제한된 수준이므로 버그는 불가피합니다. . 환영합니다. 귀중한 조언을 해주세요.

PHP에서 간단하고 안정적인 Rabbitmq 구성 요소 패키지를 사용하는 방법

easy-rabbitmq 패키지 소개

php-amqplib/php-amqplib 패키지의 보조 캡슐화로, 공통 기능을 위한 즉시 사용 가능한 제작 솔루션 세트를 제공합니다. 현재 지원되는 기능 목록은 다음과 같습니다.

  • 직접 스위치에 메시지 푸시(지연된 메시지 포함)

  • 섹터 스위치에 메시지 푸시(지연된 메시지 포함)

  • 주제 스위치에 메시지 푸시(지연된 메시지 포함) 메시지)

  • 구독 모델 하에서 안정적인 소비가 가능하며 소비자는 실패 후에도 최대 5번까지 소비를 계속 시도합니다.

  • 풀 모드에서 안정적인 소비가 가능하며, 소비자는 실패 후에도 최대 5번까지 소비를 계속하려고 시도합니다.

다른 장면이 있다면 계속해서 추가하고 나중에 반복해주세요! !

Requirements

설치 패키지의 PHP 버전 요구 사항은 주로 php-amqplib/php-amqplib 패키지 자체의 요구 사항에 따라 달라집니다. php5.0 사용자를 고려하기 위해 php-amqplib/를 사용합니다. php-amqplib 패키지 V2.

구체적인 요구 사항은 여기를 참조하세요.

하지만 저자는 php7.0 이상 사용을 권장합니다. 이 개발 패키지도 버전 7.0에서 개발되었습니다!

Installation

      composer require maweibinguo/easyrabbitmq
로그인 후 복사

Use

여기서는 소비 프로세스의 신뢰성을 보장하고 작업자의 소비 능력을 향상시키기 위해 PHP 스크립트 + 감독자의 조합을 권장합니다! 감독자에 대해 들어본 적이 없다면 여기를 클릭하여 자세히 알아보세요.

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.

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->pushToFanout(
                        $msg = time(), //消息体内容
                        $exchange = "easy_fanout_exchange", //交换机名称
                        $delaySec = 30 //延迟秒数
      );

      //无延迟,推入到指定到直链交换机
      $instance->pushToFanout(
                        $msg = time(), //消息体内容
                        $exchange = "easy_fanout_exchange" //交换机名称
      );
로그인 후 복사

2. 메시지 소비

소비는 자동 재시도를 지원하며, 각 소비 실패 후 메시지는 다시 소비 대기열에 들어갑니다. 이 클라이언트에서 지원하는 지연 전략은 다음과 같습니다.

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);
      
      //延迟消息,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, 풀 모드
풀 모드에서 안정적인 소비

      $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"
      );
로그인 후 복사
추천 학습:

php 비디오 튜토리얼

위 내용은 PHP에서 간단하고 안정적인 Rabbitmq 구성 요소 패키지를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!