Открыть сервисСервис

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, MQTTOpenWire, 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 (например, временные очереди) могут быть недоступны или работать с ограничениями.

Источники

  1. Apache ActiveMQ Artemis Documentation. Apache Software Foundation.
  2. "ActiveMQ in Action". Bruce Snyder, Dejan Bosanac, Rob Davies. Manning Publications, 2011.
  3. "HornetQ: The High-Performance Messaging Broker". Red Hat, 2014.
  4. "ActiveMQ Artemis: A New Generation of Messaging". ApacheCon Europe, 2015.
  5. "Red Hat AMQ 7: Product Documentation". Red Hat, 2023.
  6. "Reactive Streams in Apache ActiveMQ Artemis". Apache Software Foundation, 2020.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru