目錄
1、AMQP_EX_TYPE_DIRECT:直连型
首頁 php教程 php手册 php amqp 消息队列 RabbitMQ 交换器类型 直连 (三)

php amqp 消息队列 RabbitMQ 交换器类型 直连 (三)

Jun 13, 2016 am 09:42 AM
amqp 訊息 佇列

1、AMQP_EX_TYPE_DIRECT:直连型

直连型又包括: 1对1 和1对N(N对1、 N对N)

接收端receive.php代码如下
<?php

$connect = new AMQPConnection();
$connect->connect();

$channel = new AMQPChannel($connect);

$exchange = new AMQPExchange($channel);
$exchange->setName('exchange');
$exchange->setType(AMQP_EX_TYPE_DIRECT);
$exchange->declare();

$queue = new AMQPQueue($channel);
$queue->setName('logs');
$queue->declare();

$queue->bind('exchange', 'logs');

while (true) {
    $queue->consume('callback');
}

$connection->close();

function callback($envelope, $queue) {
    var_dump($envelope->getBody());
    $queue->nack($envelope->getDeliveryTag());
}
登入後複製

发送端send.php代码如下
<?php

$connect = new AMQPConnection();
$connect->connect();

$channel = new AMQPChannel($connect);

$exchange = new AMQPExchange($channel);
$exchange->setName('exchange');
$exchange->setType(AMQP_EX_TYPE_DIRECT);
$exchange->declare();

$exchange->publish('direct type test','logs');
var_dump("Send Message OK");

$connect->disconnect();
登入後複製

运行结果如图所示




创建receive_one.php和receive_two.php 并把send.php代码改成如下代码方便我们观看 receive_one.php 和 receive_two.php 代码相同 或者用dos运行多个接收端
<?php

$connect = new AMQPConnection();
$connect->connect();

$channel = new AMQPChannel($connect);

$exchange = new AMQPExchange($channel);
$exchange->setName('exchange');
$exchange->setType(AMQP_EX_TYPE_DIRECT);
$exchange->declare();

$queue = new AMQPQueue($channel);
$queue->setName('logs');
@$queue->declare();

$queue->bind('exchange', 'logs');

while (true) {
    $queue->consume('callback');
}

$connection->close();

function callback($envelope, $queue) {
    var_dump($envelope->getBody());
    $queue->nack($envelope->getDeliveryTag());
}
登入後複製




send.php
<?php

$connect = new AMQPConnection();
$connect->connect();

$channel = new AMQPChannel($connect);

$exchange = new AMQPExchange($channel);
$exchange->setName('exchange');
$exchange->setType(AMQP_EX_TYPE_DIRECT);
$exchange->declare();

for ($index = 1; $index < 5; $index++) {
    $exchange->publish($index,'logs');
    var_dump("Send:$index");
}

$exchange->delete();
$connect->disconnect();
登入後複製

运行结果如下

列队会把消息分配给每一个接收端分配处理这里看似完美但是如果想要更好的处理不同的任务就需要 公平调度
比如当1、3处理的都是简单的人 2、4都是处理的复杂的任务 如果任务过多时 receive_one.php是空闲的而receive_two.php是任务繁重的 我们进行如下测试 send.php改成5改成50
for ($index = 1; $index < 50; $index++) {
    $exchange->publish($index,'logs');
    var_dump("Send:$index");
}
登入後複製

receive_two.php 加上 sleep(3)
function callback($envelope, $queue) {
    var_dump($envelope->getBody());
    sleep(3);
    $queue->nack($envelope->getDeliveryTag());
}
登入後複製

我们运行程序结果如下


receive_one全部运行完而receive_two才运行一个 之后receive_one一直空闲 我们可以通过 在接收端设置 $channel->setPrefetchCount(1);
任务没人完成前不接收新的消息把消息发送给其他接收端
如下receive_one.php 和 receive_two.php
$channel = new AMQPChannel($connect);
登入後複製
改成如下
$channel = new AMQPChannel($connect);
$channel->setPrefetchCount(1);
登入後複製




本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

訊息已發出但被對方拒收是什麼意思 訊息已發出但被對方拒收是什麼意思 Mar 07, 2024 pm 03:59 PM

訊息已發出但被對方拒收是什麼意思

iOS 17:如何在訊息中使用表情符號作為貼紙 iOS 17:如何在訊息中使用表情符號作為貼紙 Sep 18, 2023 pm 05:13 PM

iOS 17:如何在訊息中使用表情符號作為貼紙

如何在iOS 17上的iMessage中向右滑動并快速回复 如何在iOS 17上的iMessage中向右滑動并快速回复 Sep 20, 2023 am 10:45 AM

如何在iOS 17上的iMessage中向右滑動并快速回复

如何在iPhone上編輯訊息 如何在iPhone上編輯訊息 Dec 18, 2023 pm 02:13 PM

如何在iPhone上編輯訊息

訊息已發出但被對方拒絕了是封鎖還是刪除 訊息已發出但被對方拒絕了是封鎖還是刪除 Mar 12, 2024 pm 02:41 PM

訊息已發出但被對方拒絕了是封鎖還是刪除

小米14Pro怎麼設定來訊息亮屏? 小米14Pro怎麼設定來訊息亮屏? Mar 18, 2024 pm 12:07 PM

小米14Pro怎麼設定來訊息亮屏?

Vivox100s發布日期確定!最新消息搶先知 Vivox100s發布日期確定!最新消息搶先知 Mar 22, 2024 pm 02:18 PM

Vivox100s發布日期確定!最新消息搶先知

如何使用 FaceTime 留言 iPhone 影片訊息 如何使用 FaceTime 留言 iPhone 影片訊息 Oct 26, 2023 pm 11:25 PM

如何使用 FaceTime 留言 iPhone 影片訊息

See all articles