簡體   English   中英

如何在組件之間拆分我的rabbitMQ代碼?

[英]How do I split up my rabbitMQ code across components?

我想分割我的rabbitMQ連接代碼並在不同的組件中調用它,這樣它(連接和通道)只初始化ONCE,我可以使用它而不必在我想使用它時再次打開連接。

現在發生的事情是,每當我想把一些東西傳遞給我的交換和隊列時,我會一遍又一遍地調用下面的代碼函數。 (所以如果我想將20個單獨的數據傳遞給rabbitMQ,我最終打開和關閉連接和通道20次)

有解決方案嗎

const exchange = "Exchange";
const queue = "Queue";

const passSomeData= async payload => {
  amqp = require("amqplib").connect("amqp://localhost");
  let ch;
  let connection;
  let publish = amqp
    .then(function(conn) {
      connection = conn;
      return conn.createConfirmChannel();
    })
    .then(function(chn) {
      ch = chn;
      ch.assertQueue(queue, { durable: true });
      return ch.assertExchange(exchange, "topic", { durable: true });
    })
    .then(function() {
      const data = {
        content: "x",
        title: "y",
      };
      ch.bindQueue(queue, exchange, "routingKey");

      return ch.publish(exchange, "routingKey", Buffer.from(JSON.stringify(data)), {
        persistent: true
      });
    })
    .then(() => {
      setTimeout(function() {
        connection.close();
      }, 250);
    });
};

module.exports = passSomeData;

答案從這里復制

這是一個常見的Javascript問題,而不是RabbitMQ或amqplib庫特有的問題。

我相信你可以在模塊級別打開一個連接,並在你的passSomeData方法中使用它。 或者,如果模塊級“connection”變量為null,則passSomeData可以懶惰地打開連接,然后重新使用該連接。

在某些時候,您可能需要使用連接池,但這取決於您的用例和工作負載。


注意: RabbitMQ團隊監控rabbitmq-users 郵件列表 ,有時只回答StackOverflow上的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM