<span><span><?php </span></span><span><span>namespace Acme<span>\AmqpWrapper</span>; </span></span><span> </span><span><span>use PhpAmqpLib<span>\Connection\AMQPConnection</span>; </span></span><span><span>use PhpAmqpLib<span>\Message\AMQPMessage</span>; </span></span><span> </span><span><span>class WorkerSender </span></span><span><span>{ </span></span><span> <span>/* ... SOME OTHER CODE HERE ... */ </span></span><span> </span><span> <span>/** </span></span><span><span> * Sends an invoice generation task to the workers </span></span><span><span> * </span></span><span><span> * <span>@param <span>int</span> $invoiceNum </span></span></span><span><span> */ </span></span><span> <span>public function execute($invoiceNum) </span></span><span> <span>{ </span></span><span> <span>$connection = new AMQPConnection('localhost', 5672, 'guest', 'guest'); </span></span><span> <span>$channel = $connection->channel(); </span></span><span> </span><span> <span>$channel->queue_declare( </span></span><span> <span>'invoice_queue', #queue - Queue names may be up to 255 bytes of UTF-8 characters </span></span><span> <span>false, #passive - can use this to check whether an exchange exists without modifying the server state </span></span><span> <span>true, #durable, make sure that RabbitMQ will never lose our queue if a crash occurs - the queue will survive a broker restart </span></span><span> <span>false, #exclusive - used by only one connection and the queue will be deleted when that connection closes </span></span><span> <span>false #auto delete - queue is deleted when last consumer unsubscribes </span></span><span> <span>); </span></span><span> </span><span> <span>$msg = new AMQPMessage( </span></span><span> <span>$invoiceNum, </span></span><span> <span>array('delivery_mode' => 2) # make message persistent, so it is not lost if server crashes or quits </span></span><span> <span>); </span></span><span> </span><span> <span>$channel->basic_publish( </span></span><span> <span>$msg, #message </span></span><span> <span>'', #exchange </span></span><span> <span>'invoice_queue' #routing key (queue) </span></span><span> <span>); </span></span><span> </span><span> <span>$channel->close(); </span></span><span> <span>$connection->close(); </span></span><span> <span>} </span></span><span><span>}</span></span>
평소와 같이, 우리는 연결을 만들고, 채널을 도출하고, 큐를 선언해야합니다 (큐의 매개 변수는 생산자와 동일해야합니다).
.
<span><span><?php </span></span><span><span>/* ... SOME CODE HERE ... */ </span></span><span> </span><span> <span>$msg = new AMQPMessage( </span></span><span> <span>$invoiceNum, </span></span><span> <span>array('delivery_mode' => 2) # make message persistent, so it is not lost if server crashes or quits </span></span><span> <span>); </span></span><span> </span><span><span>/* ... SOME CODE HERE ... */</span></span>
: 특정 제한 없음, 우리는 필요한만큼 많은 근로자를 가질 수 있습니다. prefetch count
: 승인을 다시 보내기 전에 작업자 당 얼마나 많은 메시지가 있는지. 이렇게하면 작업자가 한 번에 1 개의 메시지를 처리하게됩니다.<span><span><?php </span></span><span><span>chdir(dirname(__DIR__)); </span></span><span><span>require_once('vendor/autoload.php'); </span></span><span> </span><span><span>use Acme<span>\AmqpWrapper\WorkerSender</span>; </span></span><span> </span><span><span>$inputFilters = array( </span></span><span> <span>'invoiceNo' => FILTER_SANITIZE_NUMBER_INT, </span></span><span><span>); </span></span><span><span>$input = filter_input_array(INPUT_POST, $inputFilters); </span></span><span><span>$sender = new WorkerSender(); </span></span><span><span>$sender->execute($input['invoiceNo']);</span></span>
: NULL은 위의 설정 이이 소비자에게만 적용됨을 의미합니다.
다음으로, 우리는 매개 변수의 주요 차이점으로 소비를 시작할 것입니다. 우리는 자동 ACK를 끄겠습니다. 우리는 메시지 처리를 마치면 RabbitMQ 서버에 알리고 새 메시지를받을 준비가되기 때문입니다.평소와 같이, 먼저 프로듀서를 살펴 보겠습니다 :
rpcsender :: execute 메소드를 살펴보면 $ credentials 매개 변수는 [ 'username'=> 'x', 'password'=> 'y'] 형식의 배열입니다. 다시, 우리는 새로운 연결을 열고 평소와 같이 채널을 만듭니다.
.
php에서 exchange_declare 메소드를 사용하여 RabbitMQ 교환을 만들 수 있습니다. AMQPCHANNAL 클래스의. 이 메소드는 교환 이름, 교환 유형 (직접, 주제, 팬 아웃 또는 헤더) 및 수동, 내구성, auto_delete 및 인수와 같은 선택적 매개 변수를 포함하여 여러 매개 변수를 사용합니다. PHP의 RabbitMQ 대기열에 메시지를 보내십니까? PHP로 RabbitMQ에서 오류를 처리하는 방법 ? PHP를 사용하여 RabbitMQ에서 메시지 내구성을 보장하려면 PHP를 사용하여 RabbitMQ에서 메시지 내구성을 확인하려면 다음을 설정할 수 있습니다. AMQPMESSAGE 클래스의 AMPERE_MODE 속성 2 대 또는 다시 시작합니다.
Correlation_id
RabbitMQ는 응용 프로그램이 서로 비동기 적으로 통신 할 수있는 메시지 중개인입니다. PHP 응용 프로그램에서 높은 부하와 복잡한 작업을보다 효율적으로 처리 할 수있게함으로써 중요한 역할을합니다. RabbitMQ는 AMQP (Advanced Message Queuing Protocol)를 사용하여 응용 프로그램의 다른 부분 간의 메시지 교환을 용이하게합니다. 이를 통해 프로세스의 분리가 가능하고 응용 프로그램을보다 확장 가능하고 탄력적으로 만들 수 있습니다.
PHP 용 RabbitMQ를 설치하려면 PHP 용 RabbitMQ를 설치하려면 먼저 RabbitMQ 서버를 설치해야합니다. 당신의 기계. 이것은 공식 RabbitMQ 웹 사이트를 통해 수행 할 수 있습니다. 서버가 설치된 후 PHP AMQP 확장자를 설치하여 RabbitMQ와 상호 작용하는 데 필요한 기능을 제공 할 수 있습니다. 이것은 pecl install amqp를 사용하여 pecl 설치 프로그램을 사용하여 수행 할 수 있습니다.
php에서 php에서 Rabbitmq 교환을 어떻게 만들 수 있습니까? PHP의 RabbitMQ 대기열에 메시지를 보내려면 먼저 인스턴스를 만들어야합니다. 메시지 내용이있는 amqpmessage 클래스의 그런 다음 AMQPCHANNAL 클래스의 BASIC_PUBLISH 메소드를 사용하여 메시지를 대기열로 보낼 수 있습니다. Basic_publish 메소드는 메시지, 교환 및 라우팅 키를 매개 변수로 가져옵니다.
php의 RabbitMQ 대기열에서 메시지를 어떻게 소비 할 수 있습니까? amqpchannel 클래스의 Basic_Consume 메소드를 사용한 RabbitMQ 대기열. 이 메소드는 큐 이름, 소비자 태그, no_local, no_ack, 독점 및 메시지가 수신 될 때 실행될 콜백 함수를 포함한 여러 매개 변수를 사용합니다. PHP를 사용한 RabbitMQ에서 오류 처리는 시도 트리 캐치 블록을 사용하여 수행 할 수 있습니다. PHP AMQP 확장은 오류가 발생할 때 AMQPException 클래스의 예외를 제외합니다. 이러한 예외를 포착하고 응용 프로그램의 요구에 따라 처리 할 수 있습니다.
RabbitMQ의 우선 순위 대기열은 대기열을 선언 할 때 x-max-creatity 인수를 설정하여 PHP에서 구현할 수 있습니다. 그런 다음 메시지를 보낼 때 AMQPMESSAGE 클래스의 우선 순위 속성을 지정한 0과 최대 우선 순위 사이의 값으로 설정할 수 있습니다. > RabbitMQ는 콜백 대기열에 설정된 응답 속성이있는 메시지를 보내서 PHP의 원격 프로 시저 호출 (RPC)에 사용할 수 있습니다. 서버는 콜백 큐에 응답을 보낼 수 있으며 클라이언트는 PHP에서 RabbitMQ를 모니터링하는 방법을 사용하여 수행 할 수 있습니다. RabbitMQ 관리 플러그인은 RabbitMQ 서버를 모니터링하고 관리하기위한 웹 기반 인터페이스를 제공합니다. AMQPCHANNAL 클래스의 메소드를 사용하여 채널 상태에 대한 정보를 얻을 수 있습니다.
위 내용은 PHP 및 RabbitMQ : 고급 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!