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

WS-ReliableMessaging

WS-ReliableMessaging (WS-RM) — это протокол веб-служб (web services), разработанный для обеспечения надёжной доставки сообщений (SOAP-сообщений) между двумя конечными точками в распределённой системе. Он является частью стека спецификаций WS-* (Web Services Architecture), разработанного OASIS (Organization for the Advancement of Structured Information Standards). WS-RM гарантирует, что сообщения будут доставлены ровно один раз (at-most-once, at-least-once, exactly-once) и в правильном порядке, даже при сбоях сети, временной недоступности получателя или перегрузках. Протокол работает на транспортном уровне поверх HTTP, SMTP, JMS и других протоколов, не требуя их модификации.

История и развитие

Спецификация WS-ReliableMessaging была впервые опубликована в 2003 году консорциумом OASIS как часть инициативы по стандартизации веб-служб. Основными авторами выступили компании IBM, Microsoft, BEA Systems и другие участники консорциума. Целью было создание открытого, независимого от платформы протокола для обеспечения надёжности, который мог бы заменить проприетарные решения (например, MQSeries от IBM, MSMQ от Microsoft).

В 2005 году была выпущена версия 1.0 (WS-ReliableMessaging 1.0), которая получила статус стандарта OASIS. В 2007 году вышла версия 1.1 (WS-ReliableMessaging 1.1), которая была принята как стандарт ISO/IEC 19763-3:2007. Версия 1.1 уточнила механизмы управления последовательностями, обработки ошибок и взаимодействия с другими протоколами стека WS-* (например, WS-Addressing, WS-Security).

В 2009 году OASIS выпустил спецификацию WS-ReliableMessaging 1.2, которая была в основном уточняющей и устраняла неоднозначности. На сегодняшний день последней стабильной версией является 1.2, хотя в промышленных системах до сих пор используется версия 1.1.

Основные принципы работы

WS-ReliableMessaging основан на концепции последовательности сообщений (sequence). В рамках одной сессии между отправителем и получателем создаётся последовательность, в которой каждое сообщение имеет уникальный идентификатор и порядковый номер. Протокол использует следующие ключевые механизмы:

  • Подтверждение (Acknowledgement): Получатель отправляет отправителю подтверждение о получении сообщения (SequenceAcknowledgement). Если отправитель не получает подтверждения в течение заданного тайм-аута, он повторно отправляет сообщение.
  • Повторная отправка (Retransmission): Отправитель хранит копии отправленных сообщений до получения подтверждения. При сбое сети или недоступности получателя сообщение повторно отправляется.
  • Упорядочивание (Ordering): Сообщения в последовательности доставляются получателю в том же порядке, в котором они были отправлены. Если сообщение с номером 3 приходит раньше сообщения с номером 2, получатель буферизует его до получения пропущенного.
  • Удаление дубликатов (Duplicate Elimination): Получатель проверяет идентификаторы сообщений и отбрасывает дубликаты, если они уже были обработаны.

Структура протокола

WS-ReliableMessaging определяет набор SOAP-заголовков и тел сообщений, которые используются для управления надёжной доставкой. Основные элементы:

  • CreateSequence: Сообщение, инициирующее создание новой последовательности. Содержит идентификатор источника (Source) и получателя (Destination), а также параметры (например, максимальное количество сообщений, время жизни).
  • CreateSequenceResponse: Ответ от получателя, содержащий идентификатор последовательности (SequenceIdentifier) и параметры (например, максимальный размер сообщения).
  • Sequence: Заголовок, добавляемый к каждому сообщению в последовательности. Содержит идентификатор последовательности и порядковый номер сообщения.
  • SequenceAcknowledgement: Заголовок, отправляемый получателем отправителю. Указывает, какие сообщения были успешно получены (в виде диапазонов номеров).
  • TerminateSequence: Сообщение, завершающее последовательность. После этого отправитель прекращает отправку, а получатель освобождает ресурсы.

Варианты гарантий доставки

WS-ReliableMessaging поддерживает четыре основных режима гарантии доставки (уровни надёжности), которые определяются политикой (Policy) протокола:

  • AtMostOnce: Сообщение доставляется не более одного раза. Допустима потеря сообщения, но не дублирование.
  • AtLeastOnce: Сообщение доставляется как минимум один раз. Допустимо дублирование, но не потеря.
  • ExactlyOnce: Сообщение доставляется ровно один раз. Сочетает AtLeastOnce и AtMostOnce, гарантируя отсутствие потерь и дублирования.
  • InOrder: Сообщения доставляются в том же порядке, в котором были отправлены. Может комбинироваться с любым из трёх предыдущих режимов.

Взаимодействие с другими протоколами WS-*

WS-ReliableMessaging обычно используется в сочетании с другими спецификациями стека WS-*:

  • WS-Addressing: Определяет адресацию сообщений (конечные точки, идентификаторы). WS-RM использует WS-Addressing для указания источника и получателя последовательности.
  • WS-Security: Обеспечивает аутентификацию, шифрование и подпись сообщений. WS-RM может работать поверх WS-Security, защищая надёжно доставляемые сообщения.
  • WS-Policy: Определяет политики, которые могут быть объявлены для конечной точки (например, требуемый уровень надёжности). Клиент может автоматически определить, поддерживает ли сервер WS-RM.
  • WS-Coordination: Используется для координации транзакций. WS-RM может быть частью транзакционной обработки, гарантируя, что сообщения доставляются только в случае успешного завершения транзакции.

Применение

WS-ReliableMessaging применяется в сценариях, где требуется гарантированная доставка сообщений в распределённых системах, особенно в корпоративных приложениях (enterprise). Основные области использования:

  • Интеграция приложений (EAI): Обмен данными между различными информационными системами (ERP, CRM, SCM) через корпоративные шины (ESB). WS-RM обеспечивает надёжность при передаче заказов, инвойсов, отчётов.
  • Банковские и финансовые системы: Обработка транзакций, переводов, платежей. Гарантия ExactlyOnce критична для предотвращения двойного списания или потери платежа.
  • Телекоммуникации: Управление биллингом, передача данных о звонках, SMS, трафике. WS-RM используется в системах OSS/BSS.
  • Государственные и медицинские системы: Обмен данными между ведомствами, медицинскими учреждениями, где потеря или дублирование информации недопустимы.
  • Облачные вычисления: Взаимодействие между микросервисами, где требуется надёжность при асинхронной передаче сообщений (например, в очередях сообщений).

Реализации

WS-ReliableMessaging реализован в нескольких открытых и коммерческих продуктах:

  • Apache CXF: Популярная Java-библиотека для веб-служб, поддерживает WS-RM 1.1 и 1.2.
  • Apache Axis2: Устаревшая, но всё ещё используемая библиотека, поддерживает WS-RM.
  • Microsoft WCF (Windows Communication Foundation): Реализация .NET Framework, поддерживает WS-RM 1.1 и 1.2.
  • IBM WebSphere Application Server: Поддерживает WS-RM через встроенный стек веб-служб.
  • Oracle SOA Suite: Поддерживает WS-RM для интеграции приложений.
  • Red Hat JBoss Fuse: Поддерживает WS-RM через Apache CXF.

Критика и ограничения

Несмотря на свою функциональность, WS-ReliableMessaging имеет ряд недостатков:

  • Сложность реализации: Протокол требует значительных вычислительных ресурсов для управления последовательностями, буферизации и повторных отправок. Это может приводить к снижению производительности по сравнению с более лёгкими протоколами (например, AMQP, MQTT).
  • Зависимость от транспортного уровня: WS-RM работает поверх HTTP, что может приводить к проблемам с тайм-аутами и перегрузками при длительных сессиях.
  • Отсутствие поддержки в современных API: С развитием RESTful-сервисов и микросервисной архитектуры популярность WS-RM снизилась. Многие современные системы предпочитают использовать более простые механизмы (например, очереди сообщений на основе RabbitMQ, Kafka).
  • Проблемы с масштабированием: Протокол плохо масштабируется для большого числа параллельных последовательностей, так как требует хранения состояния на стороне отправителя и получателя.

Интересные факты

  • WS-ReliableMessaging был одним из первых протоколов, который ввёл понятие «гарантированной доставки» в мир веб-служб, предшествуя появлению современных протоколов очередей сообщений.
  • Спецификация WS-RM 1.1 была принята как международный стандарт ISO/IEC 19763-3:2007, что делает её одним из немногих стандартов веб-служб, получивших статус ISO.
  • В 2010-х годах, с ростом популярности REST и JSON, использование WS-RM в новых проектах резко сократилось, однако он остаётся востребованным в унаследованных (legacy) системах, особенно в банковском секторе.

Источники

  • OASIS Standard: Web Services Reliable Messaging (WS-ReliableMessaging) Version 1.1, 2007.
  • OASIS Standard: Web Services Reliable Messaging (WS-ReliableMessaging) Version 1.2, 2009.
  • ISO/IEC 19763-3:2007 — Information technology — Metamodel framework for interoperability — Part 3: Metamodel for ontology registration.
  • Apache CXF Documentation: WS-ReliableMessaging.
  • Microsoft WCF Documentation: Reliable Messaging.
  • IBM Redbook: Web Services Reliable Messaging in WebSphere Application Server.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →