Как происходит взаимодействие микросервиса aigram с другими сервисами в архитектуре?

Как реализовать систему из двух микросервисов в aiogram, где первый микросервис, телеграм-бот, будет добавлять запросы пользователя в базу данных, а второй микросервис будет мониторить базу данных, обрабатывать запросы и возвращать ответы в другую таблицу базы данных для бота, сохраняя независимость микросервисов друг от друга? Можно ли создать обработчики событий для реагирования на добавление новой записи в базу данных в aiogram, для реализации не только ответов на запросы пользователей, но и инициирования диалога со стороны бота? Какие альтернативные подходы могут быть использованы для данного сценария?
  • 4 марта 2024 г. 20:28
Ответы на вопрос 2
Взаимодействие микросервиса aigram с другими сервисами в архитектуре может осуществляться посредством REST API, gRPC, RabbitMQ или других протоколов. 

Для реализации описанной системы из двух микросервисов в aiogram можно использовать следующий подход:

1. Первый микросервис (телеграм-бот) будет получать запросы от пользователей через Telegram API и добавлять их в базу данных. Для этого можно использовать ORM (например, SQLAlchemy) для работы с базой данных.

2. Второй микросервис будет мониторить базу данных с помощью библиотеки для работы с базами данных (например, aiomysql) и обрабатывать запросы. При добавлении новой записи в базу данных, второй микросервис будет получать уведомление и обрабатывать запрос.

3. Для реагирования на добавление новой записи в базу данных и инициирования диалога можно использовать механизмы обработки событий, например, использовать библиотеку aiopg для работы с PostgreSQL и создать триггеры на добавление записей в базу данных. Когда новая запись будет добавлена, бот сможет получить уведомление об этом событии и начать диалог с пользователем.

4. Альтернативным подходом может быть использование очередей сообщений (например, RabbitMQ или Kafka) для коммуникации между микросервисами. Первый микросервис будет отправлять сообщения с запросами в очередь, а второй микросервис будет слушать очередь и обрабатывать запросы.

В целом, реализация данной системы требует грамотного планирования архитектуры и выбора корректных технологий для взаимодействия и обработки данных между микросервисами.
Нашёл один способ, но это скорее костыль. Можно использовать модуль apscheduler ( https://apscheduler.readthedocs.io/en/stable/userg... ), после создания экземпляра класса в точке входа (функции main) прописать что-то вроде 
job = scheduler.add_job(myfunc, 'interval', minutes=1),
где myfunc это функция, в которой происходит вся "магия" обращения к таблице-очереди и отправка сообщений с результатами пользователю. Но, опять же это больше похоже на костыль.
Похожие вопросы