生產者(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,訊息傳送...