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 互動。我們創建了一個隊列,向隊列發送了一條訊息,並從隊列中接收了一條訊息。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3