欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

php rabbitmq topic

曹春華1年前7瀏覽0評論

PHP RabbitMQ Topic是一個用于進行消息隊列傳輸的開源軟件。它使用了AMQP 0.9.1協議,并提供了可靠的消息傳遞機制。Topic是其中一種交換機類型,可以讓多個消費者監聽同一個隊列,并且只接收特定的消息。下面我們詳細了解一下

例如,當多個服務需要監聽一個隊列,而每個服務又需要收到不同的消息時,即使用Topic來實現。主要分為三部分:交換機、隊列和綁定鍵。交換機用于將消息路由到隊列中,隊列存儲消息,并且每個隊列可以綁定一個或多個綁定鍵。綁定鍵用于路由消息到具體的隊列中,可以使用通配符(星號*和井號#)匹配多個綁定鍵。

// 創建連接和信道
$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);
$channel->queue_bind($queue_name, 'topic_logs', 'example.*');
// 消息消費
$callback = function ($msg) {
echo 'Received message: ', $msg->body, "\n";
};
$channel->basic_consume($queue_name, '', false, true, false, false, $callback);
// 消息生產
$channel->basic_publish(new AMQPMessage('Hello, World!'), 'topic_logs', 'example.1');
$channel->basic_publish(new AMQPMessage('Hello, RabbitMQ!'), 'topic_logs', 'example.2');
// 關閉連接和信道
register_shutdown_function(function () use ($channel, $connection) {
$channel->close();
$connection->close();
});

上述代碼中,我們創建了一個Topic類型的交換機,并定義了一個綁定鍵example.*,即表示監聽example開頭的所有消息。定義了一個隊列,并將其與交換機綁定。然后使用basic_publish方法,向交換機發送兩條消息。最后使用basic_consume方法,啟動消息消費。

除了星號匹配單個詞之外,井號可以匹配多個詞。例如,綁定鍵example.#可以匹配example.1.2.3和example.A.B.C.D,但是example.*只能匹配example.1這一個詞。

Topic是AMQP協議中最為通用的交換機類型之一。它可以實現高度靈活的消息路由機制,適用于復雜的消息轉發場景。