rabbitmq學習二 佇列

2021-08-21 10:04:29 字數 2110 閱讀 8997

<?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 ...