RabbitMq 簡介
RabbitMq 是一個訊息代理,允許在不同服務之間發送和接收訊息。它是一個實作高階訊息佇列協定(AMQP)的訊息代理程式。用 Erlang 程式語言寫成。
RabbitMq 可以使用各自的套件管理器安裝在不同的作業系統上。 RabbitMQ 需要預先安裝 Erlang/OTP,更多資訊請參閱官方文件。
sudo apt-get install rabbitmq-server
brew install rabbitmq
安裝後,我們可以使用以下命令啟動 RabbitMq 伺服器:
sudo rabbitmq-server
伺服器啟動後,我們可以使用預設連接埠 5672 從我們的應用程式存取rabbitmq。
要啟用 RabbitMq 管理控制台,我們可以執行以下命令:
sudo rabbitmq-plugins enable rabbitmq_management
我們可以透過瀏覽器存取http://localhost:15672/來存取RabbitMq管理控制台。預設使用者名稱和密碼是 guest。
要從 NodeJs 與 RabbitMq 交互,我們可以使用 amqplib 函式庫。我們可以使用以下命令安裝該程式庫:
npm install amqplib
要從 NodeJs 連接到 RabbitMq 並建立與 RabbitMq 互動的通道,我們可以使用以下程式碼:
const amqp = require("amqplib"); const connect = async (url) => { const connection = await amqp.connect(url); const channel = await connection.createChannel(); return channel; }; connect("amqp://localhost:5672").then((channel) => { console.log("Connected to RabbitMQ"); channel.close(); process.exit(0); });
現在,我們有了一個與 RabbitMq 互動的通道。我們可以使用此通道從 RabbitMq 發送和接收訊息。讓我們將佇列命名為 mq-test-queue 並向佇列發送訊息。
connect("amqp://localhost:5672").then((channel) => { console.log("Connected to RabbitMQ"); channel.assertQueue("mq-test-queue"); console.log("Queue created"); channel.sendToQueue("mq-test-queue", Buffer.from("Hello World!")); console.log("Message sent"); });
我們建立了一個佇列 mq-test-queue 並發送了一條訊息 Hello World!到隊列中。為了建立隊列,我們使用了assertQueue方法,為了向隊列發送訊息,我們使用了sendToQueue方法。
要從佇列接收訊息,我們可以使用consume方法。
connect("amqp://localhost:5672").then((channel) => { console.log("Connected to RabbitMQ"); channel.assertQueue("mq-test-queue"); console.log("Queue created"); channel.sendToQueue("mq-test-queue", Buffer.from("Hello World!")); console.log("Message sent"); channel.consume("mq-test-queue", (msg) => { console.log("Message received", msg.content.toString()); }); });
consum方法接受一個回呼函數,並將訊息物件傳遞給回呼函數,以使用msg.content.toString()存取訊息內容。
消費訊息後,我們需要ack或nack訊息以將訊息從佇列中刪除。我們可以使用 ack 方法來確認訊息,使用 nack 方法來拒絕訊息。
對於這個例子,我們將在消費消息後確認訊息。
const amqp = require("amqplib"); const connect = async (url) => { const connection = await amqp.connect(url); const channel = await connection.createChannel(); return channel; }; connect("amqp://localhost:5672").then((channel) => { console.log("Connected to RabbitMQ"); channel.assertQueue("mq-test-queue"); console.log("Queue created"); channel.sendToQueue("mq-test-queue", Buffer.from("Hello World!")); console.log("Message sent"); channel.consume("mq-test-queue", (msg) => { console.log("Message received", msg.content.toString()); channel.ack(msg); }); });
我們可以看到訊息從佇列中發送和接收成功。使用rabbitmq管理控制台。
在本文中,我們學習如何使用 amqplib 函式庫設定 RabbitMq 並從 NodeJs 與 RabbitMq 互動。我們創建了一個隊列,向隊列發送了一條訊息,並從隊列中接收了一條訊息。
以上是使用 NodeJs 開始使用 RabbitMq的詳細內容。更多資訊請關注PHP中文網其他相關文章!