RabbitMQ之工作(Work)模式(PHP版)

2021-10-02 03:31:46 字數 1939 閱讀 1955

生產者(p)負責生產訊息,將訊息傳送到佇列(queue)中,多個消費者(c)監聽佇列,佇列有訊息就進行消費;工作模式就是乙個生產者對應多個消費者。

rabbitmq使用的是amqp協議。要使用她你就必須需要乙個使用同樣協議的庫。這裡使用php-amqplib,並且使用composer依賴管理。

# 專案中新增乙個composer.json檔案

}# 使用composer安裝(前提要安裝composer)

composer install

生產者連線到rabbitmq broker,將訊息傳送給broker,broker將訊息存入對應佇列。 檢視生產者**(publish.php)。

<?php 

require_once __dir__ . '/../vendor/autoload.php';

require_once __dir__ . '/../conf/config.php';

use phpamqplib\connection\amqpstreamconnection;

use phpamqplib\message\amqpmessage;

use phpamqplib\exchange\amqpexchangetype;

$exchange = 'work'; // 交換器名稱

$queue = 'work'; // 佇列名稱

try

$channel->close(); // 關閉通道

$connection->close(); // 關閉連線

} catch (exception $e)

消費者連線到rabbitmq broker,消費者向rabbitmq broker請求響應佇列訊息,rabbitmq broker回應並投遞相應佇列訊息,消費者接收訊息。檢視消費者**(receive.php)。

<?php 

require_once __dir__ . '/../vendor/autoload.php';

require_once __dir__ . '/../conf/config.php';

use phpamqplib\connection\amqpstreamconnection;

$queue = 'work'; // 佇列名稱

try ;

// basic_qos方法設定引數prefetch_count = 1。這告訴rabbitmq不要在乙個時間給乙個消費者多個訊息(在處理和確認以前的訊息之前,不要向消費者傳送新訊息。相反,它將傳送給下乙個仍然不忙的消費者)。

$channel->basic_qos(null, 1, null);

// basic_consume方法設定引數no_ack=false。告訴rabbitmq消費訊息需要手動確認。

$channel->basic_consume($queue, '', false, false, false, false, $callback);

while ($channel->is_consuming())

$channel->close();

$connection->close();

} catch (exception $e)

開啟兩個消費者,乙個生產者。

檢視結果。

如果對乙個概念不了解,檢視rabbitmq基本概念

如果對裡面一些方法不了解,檢視rabbitmq各方法詳解(php版)

RabbitMQ的使用(二)work模式

昨天通宵上線 白天睡了一天,下午7.00才醒,做個飯繼續學習。接著上文最普通的佇列乙個生產者推送,乙個消費者消費,如果乙個生產者有多個消費者那會是什麼樣呢。今天我用乙個for迴圈生產50個訊息來讓消費者消費 package com.hc.work import com.hc.mqutil.mquti...

RabbitMQ的Work能者多勞模式

work能者多勞模式 乙個訊息生成者 乙個佇列,多個訊息消費者 乙個訊息,只能被乙個消費接收 關鍵 同一時刻伺服器只會發一條訊息給消費者 channel.basicqos 1 生產者 package cn.itcast.rabbitmq.work import cn.itcast.rabbitmq....

RabbitMQ工作模式

rabbitmq工作模式有六種 工作佇列模式,發布訂閱模式,路由模式,萬用字元模式,header模式和rpc模式。1.工作佇列模式 2.發布訂閱模式 交換機型別為funout。3.路由模式 交換機型別為direct。路由模式和發布訂閱模式區別 1 發布訂閱模式不需要繫結routingkey,訊息傳送...