Включение учебника RabbitMQ в наш собственный проект

Недавно, когда я пытался пройти Уроки RabbitMQ, меня накрыла волна скуки и сонливости. Их было сложно пройти!

Следовательно, я подумал, что создам что-нибудь интересное с RabbitMQ, вместо того, чтобы просто следовать руководству. Оказывается, это работает так хорошо, что мой адреналин выходит из себя и не дает уснуть до полуночи.

история проекта

Люблю мотивационные цитаты. Таким образом, я хочу очищать мотивационные цитаты каждую минуту. Это привело меня к созданию двух микросервисов. Каждый микросервис работает независимо друг от друга и выполняет только свою собственную задачу. Так мы добиваемся разделения интересов.

  • TimerService
    - каждую минуту публикует сообщение на сервер RabbitMQ.
  • QuoteService
    - извлекает цитаты из Интернета при получении события от TimerService.

Теперь, когда мы завершили проектирование решения. Давайте запачкаем руки и приступим к строительству.

Предпосылки

Прежде чем мы начнем разрабатывать микросервисы, нам потребуется несколько инструментов и фреймворков:

  • Nodej s
  • RabbitMQ
  • Знание того, как создать приложение ExpressJS.

Пошаговое руководство

Вот правило разработчиков TekLoon № 1:

Всегда начинайте с самой легкой части.

Легкий вход позволит вам выполнить первое задание и обрести уверенность, чтобы встретить предстоящие испытания.

Шаг 1. Разработка TimerService

Начнем с создания TimerService:

Давайте посмотрим, что мы здесь сделали. Мы:

  • Создал подключение к нашему серверу RabbitMQ.
  • Создал канал
  • Создана прямая краткосрочная биржа "котировок".
  • Публикует сообщение на биржу в течение каждого интервала (60 секунд)

Этот код выполняет назначение TimerService.

Шаг 2: разработка QuoteService

Давайте продолжим разработку QuoteService. Основная функция этого сервиса - очистить мотивационную цитату из Интернета, когда он получает сообщение из очереди RabbitMQ.

Сначала создайте потребителя и прослушайте событие, отправленное TimerService. Давайте сделаем это очень просто; когда мы получаем сообщение, мы вызываем функцию scrapQuoteOfTheDay():

Далее приступаем к очистке цитаты из Интернета:

Я получаю цитаты с сайта wisdomquotes.coms и записываю их в файл JSON. Довольно просто, правда?

Теперь, когда у нас есть бизнес-логика, давайте создадим HTML-страницу для отображения исключенных цитат. После некоторого исследования, самый простой способ динамически отображать HTML в ExpressJS - использовать механизм шаблонов Pug. Позвольте мне показать вам, как я это сделал:

Это пользовательский интерфейс, который будет создан на основе шаблона index.pug.

Вы можете получить полный исходный код QuoteService здесь.

Шаг 3. Настройки экспресс-сервера для QuoteService

Чтобы QuoteService мог прослушивать очередь RabbitMQ, нам нужно будет выполнить некоторые настройки во время инициализации нашего сервера. Кроме того, существует также рендеринг HTML-цитат на основе шаблона index.pug, который мы создали на втором шаге.

Помимо загрузки веб-сервера, эта конфигурация также выполняет следующие задачи:

  • Отображает шаблон index.pug (строка 17)
  • Слушает очередь RabbitMQ (строка 23)

Шаг 4: Запустите и проверьте !!!

Давайте запустим наш проект и протестируем его локально. В конечном итоге вы можете получить мой полный исходный код с Github.

  1. Загрузим наш компонент QuoteService. Перейдите в папку QuoteService и выполните npm run start
  2. Загрузите наш компонент TimerService, перейдя в папку TimerService и запустив npm run start
  3. Ниже приведены скриншоты, если вы запустите его успешно:

Заключение

RabbitMQ определенно очень прост в освоении, и у него есть четкое руководство на собственном веб-сайте, однако оно намного интереснее, когда вы включаете его в свои хобби или интересы.

Мне лично очень нравится RabbitMQ, и я хотел бы использовать его для создания микросервисов, управляемых событиями, для будущих проектов.

Наконец, во время разработки мне в голову пришло множество идей, например:

Спасибо за чтение и не стесняйтесь оставлять отзывы.

использованная литература

Вот ссылки, которые я использовал при создании этого проекта: