<?php
require_once __dir__ . '/vendor/autoload.php';
use phpamqplib\connection\amqpstreamconnection;
use phpamqplib\message\amqpmessage;
//1.鏈結伺服器
$connection = new amqpstreamconnection('localhost',5672,'guest','guest');
//2.宣告通道
$channel = $connection->channel();
//訊息遲久化需要佇列持久化和訊息持久化
//3.宣告佇列:第三個引數為true讓佇列遲久化
$channel->queue_declare('task_queue',false,true,false,false);
$data = implode(' ',array_slice($argv,1));
if(empty($data)) $data="hello world";
//4.加了delivery_mode將訊息持久化
$msg = new amqpmessage($data,['delivery_mode'=>amqpmessage::delivery_mode_persistent]);
//5.向佇列發布訊息
$channel->basic_publish($msg,'','task_queue');
echo "[x]sent",$data,"\n";
$channel->close();
$connection->close();
<?php
require_once __dir__ . '/vendor/autoload.php';
use phpamqplib\connection\amqpstreamconnection;
$connection = new amqpstreamconnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();
$channel->queue_declare('task_queue', false, true, false, false);
echo ' [*] waiting for messages. to exit press ctrl+c', "\n";
$callback = function ($msg);
/**公平排程
我們可以使用basic.qos方法,並設定prefetch_count=1。這樣是告訴rabbitmq,再同一時刻,不要傳送超過1條訊息給乙個工作者(worker),直到它已經處理了上一條訊息並且作出了響應。這樣,rabbitmq就會把訊息分發給下乙個空閒的工作者(worker)。
*/ $channel->basic_qos(null,1,null);
/**訊息響應預設是開啟的。之前的例子中我們可以使用no_ack=true標識把它關閉。是時候設定的第四個引數basic_consume為false (true 意味著不響應ack) ,當工作者(worker)完成了任務,就傳送乙個響應。
*/ $channel->basic_consume('task_queue','',false,false,false,false,$callback);
while(count($channel->callbacks))
$channel->close();
$connection->close();
下面是測試的shell檔案,這樣,佇列的訊息就平均分發到開起的多個worker程序
#!/bin/bash
php q_send.php first message.
php q_send.php second message..
php q_send.php third message...
php q_send.php fourth message....
php q_send.php fifth message.....
RabbitMQ(四)佇列結構
一 佇列結構 通常佇列由兩部分組成 1 amqqueue,負責amqp協議相關的訊息處理,即接收生產者發布的訊息 向消費者投遞訊息 處理訊息confirm acknowledge等等 2 backingqueue,它提供了相關的介面供amqqueue呼叫,完成訊息的儲存以及可能的持久化工作等。bac...
二 佇列(直線佇列和環形佇列)
佇列是乙個有序列表,可以用陣列或者鍊錶來實現,遵循先入先出的原則。front指向佇列頭的資料前乙個位置,rear指向隊尾元素。利用者兩個變數front及rear分別記錄佇列前後端的下標,front會隨著資料輸出而改變,而rear則是隨著資料輸入而改變。下面利用陣列建立乙個含有三個元素的佇列,及注釋如...
資料結構(二) 佇列
一 佇列定義 佇列是限定在一端進行插入,另一端進行刪除特殊線性表。二 佇列基本操作 入隊出隊 三 佇列例題 1.例1 舞伴配對問題 分析 這一題是一道經典的取模運算,每一次將編號往前加一位,到達n就取模。include include include include int main return ...