<?php
require_once __dir__ . '/vendor/autoload.php';
use phpamqplib\connection\amqpstreamconnection;
use phpamqplib\message\amqpmessage;
$connection = new amqpstreamconnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();
$channel->exchange_declare('topic_logs', 'topic', false, false, false);
$routing_key = isset($argv[1]) && !empty($argv[1]) ? $argv[1] : 'anonymous.info';
$data = implode(' ', array_slice($argv, 2));
if(empty($data)) $data = "hello world!";
$msg = new amqpmessage($data);
$channel->basic_publish($msg, 'topic_logs', $routing_key);
echo " [x] sent ",$routing_key,':',$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->exchange_declare('topic_logs', 'topic', false, false, false);
list($queue_name, ,) = $channel->queue_declare("", false, false, true, false);
$binding_keys = array_slice($argv, 1);
if( empty($binding_keys ))
foreach($binding_keys as $binding_key)
echo ' [*] waiting for logs. to exit press ctrl+c', "\n";
$callback = function($msg);
$channel->basic_consume($queue_name, '', false, true, false, false, $callback);
while(count($channel->callbacks))
$channel->close();
$connection->close();
執行:
執行下邊命令 接收所有日誌:
$ php receive_logs_topic.php "#"
執行下邊命令 接收來自」kern「裝置的日誌:
$ php receive_logs_topic.php "kern.*"
執行下邊命令 只接收嚴重程度為」critical「的日誌:
$ php receive_logs_topic.php "*.critical"
執行下邊命令 建立多個繫結:
$ php receive_logs_topic.php "kern.*" "*.critical"
執行下邊命令 傳送路由鍵為 "kern.critical" 的日誌:
$ php emit_log_topic.php "kern.critical" "a critical kernel error"
RabbitMQ學習(5) 主題
我們改進了我們的日誌系統 我們沒有使用只有虛擬廣播 的fanout 交換機,而是使用direct 交換機,並有選擇性地接收日誌的可能性。儘管使用 直接交換改進了我們的系統,但它仍然有侷限性 它不能根據多個標準進行路由選擇。在我們的日誌系統中,我們可能不僅要根據嚴重性來訂閱日誌,還要根據發出日誌的 進...
rabbitmq 理論 主題交換機
儘管直連交換機能夠改善我們的系統,但是它也有它的限制 沒辦法基於多個標準執行路由操作。在我們的日誌系統中,我們不只希望訂閱基於嚴重程度的日誌,同時還希望訂閱基於傳送 的日誌。unix工具syslog就是同時基於嚴重程度 severity info warn crit.和 裝置 facility au...
rabbitmq路由模式 訂閱 主題
1.依賴 junit junit 4.12 test com.rabbitmq amqp client 3.5.1 2.訊息提供者 public class test 4 direct provider 3.訊息接收者 public class test 4 direct consumer1 6,連...