Node.js приложение, действующее как производитель и потребитель - PullRequest
0 голосов
/ 17 января 2020

Сейчас я работаю над тем, чтобы приложение сохраняло данные в базе данных с помощью API REST. Основной поток c: REST API -> object -> save to database. Я хотел представить очередь в приложении, имея в виду, что производитель и потребитель являются частью одного, упомянутого выше приложения.

Возможно ли, чтобы приложение Node.js выступало в роли как производителя, так и потребитель очереди? Зная, что Node.js является однопоточным языком, дает ли он мне какой-либо другой выбор вместо создания двух приложений - одно создает в очередь, а второе - активно ожидает сообщений в очереди и сохраняет в базу данных?

Кроме того, здесь требуется, чтобы приложение обрабатывало любой элемент, который не был подтвержден в очереди при перезапуске. Это также заставляет меня думать, что здесь лучше всего подходит архитектура «двух приложений».

Спасибо за помощь.

1 Ответ

0 голосов
/ 21 января 2020

Да, nodejs способен сделать это и хорошо подходит для каждого случая интенсивного использования приложений ввода-вывода. Дело в том, что «чего ты пытаешься достичь»? Очереди сообщений предназначены для того, чтобы разные приложения могли взаимодействовать друг с другом, а если вам нужна шина событий в процессе, это полный перебор. Существует много более простых и эффективных способов распространения сообщений между несвязанными компонентами одного и того же приложения nodejs; Одним из таких способов является EventEmitter , который позволяет вашим компонентам взаимодействовать в режиме pubsub

Если вы уверены, что брокер AMQP - это ваше решение, вам просто нужно

  • Определите класс «продюсер», который публикует данные в обмене myExchange
  • Определите «потребительскую» очередь, которая объявляет очередь myQueue
  • Создайте привязку при запуске приложения между myExchange и myQueue на основе некоторого ключа маршрутизации. Затем, когда сообщение получено от «потребителя», вам необходимо подтвердить после сохранения в БД. Когда сообщение подтверждено, оно будет уничтожено, поскольку оно уже было использовано. После ошибки вы можете решить восстановить сообщение с помощью NACK

. Существуют nodejs библиотеки, упрощающие код, например Rascal

.
...