Как мне разделить мой код RabbitMQ по компонентам?

#javascript #node.js #express #rabbitmq #backend

#javascript #node.js #экспресс #rabbitmq #серверная часть

Вопрос:

Я хочу разделить мой код подключения RabbitMQ и вызывать его в разных компонентах, чтобы он (соединение и канал) инициализировался только ОДИН РАЗ, и я мог использовать его всякий раз, вместо того, чтобы снова открывать соединение, когда я захочу его использовать.

Что происходит прямо сейчас, так это то, что я вызываю приведенную ниже функцию code снова и снова каждый раз, когда я хочу передать что-то в свой exchange и очередь. (таким образом, если я хочу передать 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;
  

Ответ №1:

Ответ скопирован отсюда

Это общий вопрос Javascript, а не специфичный для RabbitMQ или библиотеки amqplib.

Я полагаю, вы можете открыть соединение на уровне модуля и использовать его в своем методе passSomeData. Или passSomeData может лениво открыть соединение, если переменная «connection» на уровне модуля равна null, а затем повторно использовать это соединение.

В какой-то момент вам может понадобиться использовать пул соединений, но это зависит от вашего варианта использования и рабочей нагрузки.


ПРИМЕЧАНИЕ: команда RabbitMQ отслеживает rabbitmq-users список рассылки и только иногда отвечает на вопросы в StackOverflow.