stiv208
@stiv208
Программист. Пока учусь, ищу работу (ну хоть что-н

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

Есть ли в aiorgam возможность создавать обработчики события добавления новой записи в базу данных. т.е. я хочу создать систему из двух микросервисов, первый будет являться телеграм ботом на aigram, который по запросу пользователя будет добавлять в базу данных в таблицу-очередь запрос для другого сервиса, который в свою очередь будет мониторить эту очередь и обрабатывать эти запросы и возвращать ответы в другую таблицу-очередь, которую будет "проверять" сервис-бот и возвращать ответ пользователю. Или для этого существует другой более адекватный подход? Т.е. мне нужно чтобы бот не только отвечал на сообщения пользователей, а мог сам инициировать диалог, если у него случилось какое-либо событие. Причем чтобы это взаимодействие было скрыто через, условный API, чтобы изменение одного микросервиса не предполагало изменений другого.
  • Вопрос задан
  • 55 просмотров
Решения вопроса 1
altprtcl
@altprtcl
Python - разработчик
Исходя из того, что я понял, подход вполне правильный, однако использование apscheduler - третье колесо для велосипеда. Библиотека aiogram изначально является асинхронной, поэтому лучше будет использовать встроенные функции AsyncIO:
if __name__ ==  "__main__":
    loop = asyncio.get_event_loop()
    loop.create_task(dp.start_polling(bot)) #Запуск диспетчера aiogram
    loop.create_task(myfunc()) #Запуск вашей функции (Перепишите её под бесконечный цикл)
    loop.run_forever()

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы