Привет всем! Я вернулся после напряженной работы и хочу представить приложение, управляемое событиями. Я исследовал и изучил микросервисы и хочу начать с событийно-управляемой архитектуры. Если вы хотите узнать больше о событийно-управляемой архитектуре, пожалуйста, посетите эту страницу.
Подготовка
Я использую 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
.
- Обновите файл
.env
, чтобы указать на ваш хост RabbitMQ. - Запустите
yarn --frozen-lockfile
для загрузки зависимостей.
Consumer
- Запустите
node consumer.js
.
Издатель/Отправитель
- Запустите
node sender.js
.
ЛИЦЕНЗИЯ
MIT
Подготовка RabbitMQ в Amazon MQ
Мы настроим RabbitMQ вручную через AWS Console.
-
Найдите Amazon MQ в поисковой строке и нажмите Amazon MQ.
-
Нажмите кнопку
Get started
. -
Выберите
RabbitMQ
и нажмитеNext
. -
Мы будем использовать
Single-instance broker
только для тестирования, вы можете использоватьCluster deployment
для производственного использования. И нажмитеNext
. -
Дайте имя брокеру и выберите экземпляр
mq.t3.micro
. -
Установите имя пользователя и пароль для узла RabbitMQ.
-
Откройте
Дополнительные настройки
. Убедитесь, что вы выбралиПубличный доступ
иИспользовать VPC и подсеть(и)по умолчанию
. Пожалуйста, избегайтеPublic access
для производственного использования. Вам может понадобиться использоватьPrivate access
и настроить VPC самостоятельно для производственного использования. -
Наконец, нажмите
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
. Вы получите консоль, как показано здесь.
Поздравляем
Поздравляем! Вы создали простое приложение для отправки и получения сообщений. Не забудьте очистить ресурсы, если вы больше не будете их использовать.