Простое управляемое событиями приложение с использованием Amazon MQ (RabbitMQ)

Привет всем! Я вернулся после напряженной работы и хочу представить приложение, управляемое событиями. Я исследовал и изучил микросервисы и хочу начать с событийно-управляемой архитектуры. Если вы хотите узнать больше о событийно-управляемой архитектуре, пожалуйста, посетите эту страницу.

Подготовка

Я использую Node.js для примера приложения, поэтому вам понадобятся такие инструменты, как Node.js и Yarn. В следующем посте я приведу другой пример с различными языками программирования, такими как C# и Go. Вы можете проверить этот репозиторий Github, чтобы осмотреться.

bervProject / rabbitmq-demo

RabbitMQ Demo

RabbitMQ Demo

Простое приложение для публикации/подписки.

Инструменты

  • Nodejs.
  • Yarn v1.

Подготовка

  • (Для пользователя Linux/MacOS) Скопируйте .env.sh.example в .env.sh.
  • (Для пользователя Windows — CMD) Скопируйте ,env.cmd.example в .env.cmd.
  • (Для Powershell) Скопируйте .env.ps1.example в .env.ps1.
  1. Обновите файл .env, чтобы указать на ваш хост RabbitMQ.
  2. Запустите yarn --frozen-lockfile для загрузки зависимостей.

Consumer

  • Запустите node consumer.js.

Издатель/Отправитель

  • Запустите node sender.js.

ЛИЦЕНЗИЯ

MIT

Посмотреть на GitHub

Подготовка RabbitMQ в Amazon MQ

Мы настроим RabbitMQ вручную через AWS Console.

  1. Найдите Amazon MQ в поисковой строке и нажмите Amazon MQ.

  2. Нажмите кнопку Get started.

  3. Выберите RabbitMQ и нажмите Next.

  4. Мы будем использовать Single-instance broker только для тестирования, вы можете использовать Cluster deployment для производственного использования. И нажмите Next.

  5. Дайте имя брокеру и выберите экземпляр mq.t3.micro.

  6. Установите имя пользователя и пароль для узла RabbitMQ.

  7. Откройте Дополнительные настройки. Убедитесь, что вы выбрали Публичный доступ и Использовать VPC и подсеть(и)по умолчанию. Пожалуйста, избегайте Public access для производственного использования. Вам может понадобиться использовать Private access и настроить VPC самостоятельно для производственного использования.

  8. Наконец, нажмите Next. Просмотрите свою конфигурацию и нажмите Создать брокер.

Время писать код!

  • Запустите свой проект. Используйте yarn init. Введите детали вашего проекта.

  • Установите некоторые зависимости.

Код отправителя

const amqp = require('amqplib');
const { v4: uuidv4 } = require('uuid');

// setup queue name
const queueName = 'test-queue';

/**
 * Send message
 */
async function send() {
  // connect to RabbitMQ
  const connection = await amqp.connect(process.env.RABBITMQ_HOST || 'amqp://localhost');
  // create a channel
  const channel = await connection.createChannel();
  // create/update a queue to make sure the queue is exist
  await channel.assertQueue(queueName, {
    durable: true,
  });
  // generate correlation id, basically correlation id used to know if the message is still related with another message
  const correlationId = uuidv4();
  // send 10 messages and generate message id for each messages
  for (let i = 1; i <= 10; i++) {
    const buff = Buffer.from(JSON.stringify({
      test: `Hello World ${i}!!`
    }), 'utf-8');
    const result = channel.sendToQueue(queueName, buff, {
      persistent: true,
      messageId: uuidv4(),
      correlationId: correlationId,
    });
    console.log(result);
  }
  // close the channel
  await channel.close();
  // close the connection
  await connection.close();
}

send();
Вход в полноэкранный режим Выйти из полноэкранного режима

Код потребителя

const amqp = require('amqplib');

// setup queue name
const queueName = 'test-queue';

/**
 * consume the message
 */
async function consume() {
  // setup connection to RabbitMQ
  const connection = await amqp.connect(process.env.RABBITMQ_HOST || 'amqp://localhost');
  // setup channel
  const channel = await connection.createChannel();
  // make sure the queue created
  await channel.assertQueue(queueName, {
    durable: true,
  });
  console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", queueName);
  // setup consume
  channel.consume(queueName, function (message) {
    // just print the message in the console
    console.log("[%s] Received with id (%s) message: %s", message.properties.correlationId, message.properties.messageId, message.content.toString());
    // ack manually
    channel.ack(message);
  }, {
    // we use ack manually
    noAck: false,
  });
}

consume();
Войти в полноэкранный режим Выйти из полноэкранного режима

Протестируйте свой код

  • Установите переменную окружения, вы можете использовать примеры скриптов для установки переменной окружения. Например:

    • Для powershell
     $env:RABBITMQ_HOST = 'amqps://<username>:<password>@<rabbitmq-endpoint>:<rabbitmqport>'
    
    • Для Linux/MacOS
     export RABBITMQ_HOST=amqps://<username>:<password>@<rabbitmq-endpoint>:<rabbitmqport>
    
  • Запустите отправителя. Используйте node sender.js. Вы получите консоль, как показано здесь.

  • Запустите потребителя. Используйте node consumer.js. Вы получите консоль, как показано здесь.

Поздравляем

Поздравляем! Вы создали простое приложение для отправки и получения сообщений. Не забудьте очистить ресурсы, если вы больше не будете их использовать.

Оцените статью
devanswers.ru
Добавить комментарий