
Современный MQTT-сервис на Python
borisalekseev1 1 минуту назад Современный MQTT-сервис на Python Простой 7 мин 15 Блог компании Райффайзен Банк Python * Интернет вещей Open source * Программирование * Туториал В Python при выборе библиотеки для работы...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. borisalekseev1 1 минуту назад Современный MQTT-сервис на Python Простой 7 мин 15 Блог компании Райффайзен Банк Python * Интернет вещей Open source * Программирование * Туториал В Python при выборе библиотеки для работы с MQTT почти всегда приходишь к paho-mqtt. Это зрелый и самый популярный клиент, но его API построен на колбэках, а современное Python-приложение живёт в asyncio: FastAPI, фоновые воркеры, асинхронные клиенты и всё это в одном общем event loop. В одном из IoT-проектов я столкнулся ровно с этим.
Мне нужен был MQTT-клиент, который без сложной адаптации встраивается в асинхронное приложение и позволяет работать с подписками как с управляемыми объектами, а не через набор колбэков. Похожий запрос давно был и в FastStream. Задачу на поддержку MQTT открыли ещё в ноябре 2023 года, но долго не закрывали: интерес был, а вот с базовым драйвером всё было не так очевидно.
Технические детали
Заворачивать paho-mqtt в асинхронную обёртку можно, но тогда в основе интеграции FastStream всё равно остаётся callback/thread-модель. В итоге я написал отдельный драйвер — zmqtt, а затем и MQTT-интеграцию в FastStream. Меня зовут Борис Алексеев, я senior разработчик и фичалид в Райффайзенбанке, один из мейнтейнеров FastStream и автор zmqtt.
В этой статье покажу, как теперь выглядит MQTT-сервис на Python: асинхронные обработчики, управляемые подписки, тестирование без реального брокера и AsyncAPI-документация. А заодно кратко расскажу, зачем под это пришлось написать новый драйвер. Почему пришлось начать с драйвераpaho-mqtt — зрелый проект и де-факто стандартный MQTT-клиент для Python.
Он поддерживает все популярные версии протокола MQTT: 5. Асинхронные обёртки над paho существуют, но для FastStream этого всё равно было недостаточно. Фреймворку нужно не просто дождаться следующего сообщения из брокера, а маршрутизировать поток сообщений по подписчикам, управлять их жизненным циклом и не превращать каждую подписку в отдельное MQTT-соединение.
Отраслевые последствия
В случае с paho-mqtt остаются два варианта: писать сложный слой роутинга поверх чужой callback-модели или плодить соединения на каждую подписку. Первый вариант неприятно поддерживать, а второй недопустим из-за расточительного обращения с ресурсами. Также хочется более удобный API: объект подписки вместо колбэка, готовая имплементация request/response, строго типизированные структуры данных в противовес универсальным контейнерам для MQTT 5.
Критерийpaho-mqttzmqttМодель выполненияCallback API, threadingasyncioПодпискиsubscribe() + callbacksSubscription — отдельный объект с жизненным цикломRequest/responseНет готовой высокоуровневой абстракцииЕсть request() для MQTT 5.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





