Включение учебника RabbitMQ в наш собственный проект
Недавно, когда я пытался пройти Уроки RabbitMQ, меня накрыла волна скуки и сонливости. Их было сложно пройти!
Следовательно, я подумал, что создам что-нибудь интересное с RabbitMQ, вместо того, чтобы просто следовать руководству. Оказывается, это работает так хорошо, что мой адреналин выходит из себя и не дает уснуть до полуночи.
история проекта
Люблю мотивационные цитаты. Таким образом, я хочу очищать мотивационные цитаты каждую минуту. Это привело меня к созданию двух микросервисов. Каждый микросервис работает независимо друг от друга и выполняет только свою собственную задачу. Так мы добиваемся разделения интересов.
- TimerService
- каждую минуту публикует сообщение на сервер RabbitMQ. - QuoteService
- извлекает цитаты из Интернета при получении события от TimerService.
Теперь, когда мы завершили проектирование решения. Давайте запачкаем руки и приступим к строительству.
Предпосылки
Прежде чем мы начнем разрабатывать микросервисы, нам потребуется несколько инструментов и фреймворков:
Пошаговое руководство
Вот правило разработчиков 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.
- Загрузим наш компонент QuoteService. Перейдите в папку QuoteService и выполните
npm run start
- Загрузите наш компонент TimerService, перейдя в папку TimerService и запустив
npm run start
- Ниже приведены скриншоты, если вы запустите его успешно:
Заключение
RabbitMQ определенно очень прост в освоении, и у него есть четкое руководство на собственном веб-сайте, однако оно намного интереснее, когда вы включаете его в свои хобби или интересы.
Мне лично очень нравится RabbitMQ, и я хотел бы использовать его для создания микросервисов, управляемых событиями, для будущих проектов.
Наконец, во время разработки мне в голову пришло множество идей, например:
- Как развернуть эти микросервисы на Heroku.
- Как обновить HTML-страницу в реальном времени для отображения котировок.
Спасибо за чтение и не стесняйтесь оставлять отзывы.
использованная литература
Вот ссылки, которые я использовал при создании этого проекта: