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協議中最為通用的交換機類型之一。它可以實現高度靈活的消息路由機制,適用于復雜的消息轉發場景。
上一篇css寬度自適應高度
下一篇php qq郵箱發送郵件