Apache ActiveMQ Artemis¶
Apache ActiveMQ Artemis — это высокопроизводительный, многопротокольный брокер сообщений с открытым исходным кодом, написанный на языке Java. Он относится к классу программного обеспечения для промежуточного уровня, ориентированного на обмен сообщениями (Message Oriented Middleware, MOM), и реализует спецификации Java Message Service (JMS) 2.0. Проект был создан как эволюционное развитие брокера HornetQ, разработанного компанией JBoss (ныне часть Red Hat), и впоследствии передан в инкубатор Apache Software Foundation, где получил статус проекта верхнего уровня (Top-Level Project). ActiveMQ Artemis позиционируется как преемник классического Apache ActiveMQ, предлагая улучшенную архитектуру, более высокую производительность и гибкость в настройке кластеризации и маршрутизации сообщений.
¶История
¶Предшественники и создание
Изначально брокер сообщений HornetQ был создан в 2009 году компанией JBoss (Red Hat) как замена устаревшему JBossMQ. В 2014 году Red Hat передала код HornetQ в инкубатор Apache Software Foundation. Проект был переименован в ActiveMQ Artemis, чтобы подчеркнуть его преемственность по отношению к классическому ActiveMQ (версии 5.x), но при этом обозначить принципиально новую архитектуру. Первый стабильный релиз (версия 1.0.0) состоялся в 2015 году.
¶Развитие и статус
В 2018 году проект достиг статуса Apache Top-Level Project. Начиная с версии 2.0, ActiveMQ Artemis стал основой для последующих выпусков классического ActiveMQ «Classic» (версии 5.7+), которые начали использовать его ядро для обеспечения совместимости. По состоянию на 2024 год ActiveMQ Artemis продолжает активно развиваться: выходят регулярные обновления, добавляются новые протоколы (например, поддержка AMQP 1.0, MQTT, STOMP, OpenWire) и улучшается интеграция с Kubernetes и облачными средами.
¶Архитектура и ключевые особенности
¶Неблокирующий ввод-вывод (NIO)
В основе Artemis лежит неблокирующая архитектура на основе Java NIO (New I/O), что позволяет обрабатывать тысячи одновременных подключений с минимальными накладными расходами на потоки. В отличие от классического ActiveMQ, который использовал блокирующий ввод-вывод (BIO), Artemis способен обслуживать значительно большее количество клиентов на одном сервере.
¶Асинхронная модель
Брокер полностью асинхронный: все операции (отправка, получение, подтверждение) выполняются в неблокирующем режиме. Это достигается за счёт использования собственного реактивного ядра, построенного на принципах реактивного программирования (Reactive Streams). Такая модель обеспечивает низкую задержку (latency) и высокую пропускную способность (throughput).
¶Многопротокольность
Artemis поддерживает несколько протоколов обмена сообщениями одновременно на одном порту или на разных портах:
- OpenWire — собственный протокол ActiveMQ, совместимый с классическим ActiveMQ.
- AMQP 1.0 (Advanced Message Queuing Protocol) — открытый стандарт для межплатформенного обмена сообщениями.
- MQTT (Message Queuing Telemetry Transport) — лёгкий протокол для IoT и мобильных устройств.
- STOMP (Streaming Text Oriented Messaging Protocol) — текстовый протокол, часто используемый в веб-приложениях.
- CORE — собственный протокол Artemis, оптимизированный для взаимодействия с клиентами на Java.
¶Кластеризация и высокая доступность
Artemis поддерживает несколько режимов кластеризации:
- Активный-активный (Active-Active) — все узлы кластера обрабатывают сообщения, что обеспечивает балансировку нагрузки.
- Активный-пассивный (Active-Passive) — один узел активен, второй находится в режиме ожидания и берёт на себя работу при сбое.
- Живое копирование (Live-Replica) — полная репликация данных между узлами с автоматическим переключением (failover) при отказе.
Для обеспечения высокой доступности используется протокол репликации на основе журнала (journal-based replication), что гарантирует сохранность сообщений даже при внезапном отключении питания.
¶Хранение сообщений
Artemis использует собственный высокопроизводительный журнал (journal) для хранения сообщений на диске. Журнал основан на файловой системе и оптимизирован для последовательной записи, что обеспечивает высокую скорость записи и чтения. Поддерживаются два режима:
- NIO Journal — использует Java NIO для работы с файлами.
- AIO Journal (Asynchronous I/O) — использует нативные системные вызовы (например,
io_submitв Linux) для максимальной производительности.
¶Применение
¶Корпоративные системы
ActiveMQ Artemis широко применяется в корпоративных приложениях, требующих надёжной доставки сообщений, гарантий «ровно один раз» (exactly-once) и поддержки транзакций. Он используется в финансовых системах, логистике, телекоммуникациях и государственных информационных системах.
¶Микросервисная архитектура
Благодаря поддержке протоколов AMQP и MQTT, Artemis часто используется в качестве брокера сообщений в микросервисных архитектурах, где требуется асинхронное взаимодействие между сервисами. Он интегрируется с такими платформами, как Kubernetes, Docker, и может быть развёрнут в облачных средах (AWS, Azure, GCP).
¶Интернет вещей (IoT)
Поддержка MQTT делает Artemis подходящим выбором для IoT-решений, где необходимо обрабатывать сообщения от миллионов устройств с низким энергопотреблением и нестабильными соединениями.
¶Веб-приложения
Через протокол STOMP и использование WebSocket (встроенная поддержка) Artemis может служить брокером для веб-приложений, обеспечивая push-уведомления и обновления в реальном времени.
¶Сравнение с классическим ActiveMQ
| Характеристика | ActiveMQ Classic (5.x) | ActiveMQ Artemis |
|---|---|---|
| Архитектура | Блокирующий ввод-вывод (BIO) | Неблокирующий ввод-вывод (NIO) |
| Производительность | Средняя (до 10-20 тыс. сообщений/сек) | Высокая (до 1 млн сообщений/сек) |
| Масштабируемость | Ограниченная (один поток на соединение) | Высокая (асинхронная модель) |
| Поддержка протоколов | OpenWire, STOMP, MQTT | OpenWire, AMQP 1.0, MQTT, STOMP, CORE |
| Управление | JMX, веб-консоль | JMX, веб-консоль, REST API |
| Хранение | KahaDB (на основе B-Tree) | Журнал (NIO/AIO) |
¶Инструменты управления и мониторинга
¶Веб-консоль
Artemis поставляется с встроенной веб-консолью, построенной на основе Apache ActiveMQ Web Console. Она позволяет просматривать очереди, топики, подписчиков, отправлять и получать сообщения, а также управлять настройками брокера.
¶JMX (Java Management Extensions)
Все метрики и операции брокера доступны через JMX, что позволяет интегрировать Artemis с системами мониторинга (Prometheus, Grafana, Nagios, Zabbix) и управления (JConsole, VisualVM).
¶REST API
Начиная с версии 2.0, Artemis предоставляет RESTful API для управления брокером, создания и удаления очередей, отправки и получения сообщений. Это упрощает автоматизацию и интеграцию с CI/CD-пайплайнами.
¶Интересные факты
- Производительность: В тестовых сценариях Artemis демонстрирует пропускную способность до 1,5 миллиона сообщений в секунду на одном узле при использовании AIO Journal и оптимизированных настроек.
- Совместимость: Artemis полностью совместим с JMS 2.0, что позволяет использовать его в приложениях, написанных для классического ActiveMQ, без изменения кода.
- Использование в Red Hat: Red Hat использует ActiveMQ Artemis как основу для своего коммерческого продукта Red Hat AMQ 7, который входит в состав платформы Red Hat JBoss Middleware.
- Поддержка Kubernetes: Artemis имеет официальный оператор для Kubernetes (ActiveMQ Artemis Operator), который упрощает развёртывание и управление брокером в контейнерных средах.
¶Критика и ограничения
Несмотря на высокую производительность, ActiveMQ Artemis имеет ряд недостатков:
- Сложность настройки: Для достижения максимальной производительности требуется тонкая настройка параметров журнала, пула потоков и сетевых буферов, что может быть сложно для новичков.
- Документация: Хотя документация проекта обширна, она иногда устаревает или не охватывает все сценарии использования, особенно в области кластеризации и репликации.
- Отсутствие встроенной поддержки JMS 2.0 для некоторых протоколов: Например, при использовании AMQP 1.0 или MQTT некоторые возможности JMS (например, временные очереди) могут быть недоступны или работать с ограничениями.
¶Источники
- Apache ActiveMQ Artemis Documentation. Apache Software Foundation.
- "ActiveMQ in Action". Bruce Snyder, Dejan Bosanac, Rob Davies. Manning Publications, 2011.
- "HornetQ: The High-Performance Messaging Broker". Red Hat, 2014.
- "ActiveMQ Artemis: A New Generation of Messaging". ApacheCon Europe, 2015.
- "Red Hat AMQ 7: Product Documentation". Red Hat, 2023.
- "Reactive Streams in Apache ActiveMQ Artemis". Apache Software Foundation, 2020.
