Концепции

Гарантии поставки данных

Стратегии поставки данных

Можно использовать три уровня качества обслуживания (QoS), определяющие уровень гарантии отправки или получения.

  • QoS 0 (at most once): гарантирует, что конкретное сообщение будет получено подписчиком максимум один раз. Это означает, что сообщение может никогда не прийти. Отправитель и получатель попытаются доставить сообщение, но если сообщение не достигнет пункта назначения (например из-за сетевого подключения), то сообщение может быть потеряно. Такое качество обслуживания имеет наименьшие издержки сетевого трафика и наименьшую нагрузку на клиента и брокера и часто полезно для данных телеметрии, где не имеет значения, потеряна ли часть данных.

  • QoS 1 (at least once): гарантирует, что сообщение дойдет до назначенного получателя один или несколько раз. Отправитель продолжит отправлять сообщение до тех пор, пока не получит подтверждение от получателя о получении сообщения. В результате получатель может получить сообщение несколько раз и при этом увеличивается нагрузка на сеть по сравнению с QoS 0 (из-за подтверждений). Кроме того, накладывается дополнительная нагрузка на отправителе, так как ему необходимо сохранить сообщение и повторить попытку, если он не получит подтверждения в течение заданного времени.

  • QoS 2 (exactly once): гарантирует, что сообщение будет получено получателем ровно один раз. Это гарантирует, что получатель никогда не получит дубликатов сообщения и в конечном итоге получит его. Это привносит дополнительные затраты на сетевые издержки и сложность, необходимые отправителю и получателю. Самый затратный уровень качества обслуживания с точки зрения сетевого трафика и нагрузки на отправителя и получателя.

Модели доставки сообщений

Entaxy ION поддерживает следующие модели доставки сообщений:

  • Точка-точка («point-to-point»):

    Модель «точка-точка» реализуется через очереди. Очередь действует, как буфер FIFO (первый вошел, первый вышел), на который может подписаться один или несколько потребителей. Каждое сообщение доставляется только одному из подписанных потребителей.

    • Каждое отправленное сообщение доставляется только одному из подписанных потребителей.

    • Когда несколько консюмеров подписываются на очередь, дефолтное поведение брокера заключается в циклической (round-robin) отправке сообщений тем консюмерам, у которых есть место в буферах предварительной выборки.

    • Приоритеты потребителей позволяют гарантировать, что потребители с высоким приоритетом будут получать сообщения, пока они активны. Обычно активные потребители, подключенные к очереди, получают сообщения из нее в циклическом режиме. Когда используются приоритеты потребителей, сообщения доставляются по кругу, если существует несколько активных потребителей с одинаковым высоким приоритетом. Сообщения будут передаваться потребителям с более низким приоритетом только в том случае, если потребители с высоким приоритетом не подключены или эти потребители с высоким приоритетом отказались принять сообщение.

    • Брокер сообщений поддерживает приоритизацию сообщений, при которой сообщения с большим приоритетом (наибольшее значение 9) будет вычитано раньше сообщений с более низким приоритетом.

    • По умолчанию очередь сообщений гарантирует, что сообщения вычитываются в том же порядке, в котором были записаны.

    • Предоставляется возможность указать срок действия («time-to-live») сообщения, чтобы исключить его доставку потребителю после истечения срока действия.

  • Публикация-подписка («publish-subscribe»):

    Модель обмена сообщениями «публикация-подписка» реализуется через топики. Когда сообщение отправляется в топик, оно распределяется по всем подписанным пользователям.

    • Каждое отправленное сообщение доставляется каждому из подписанных потребителей через топики.

    • Модель обмена сообщениями «публикация-подписка» поддерживает включение durable subscription для подписчиков темы. В этому случае сообщение сохраняется для каждого подписчика до тех пор, пока он его не прочитает из темы.

Функциональные возможности

Очередь сообщений

  • Очередь сообщений гарантирует, что сообщения вычитываются в том же порядке, в котором были записаны.

  • Сообщения с высоким приоритетом (максимальное значение 9) вычитываются раньше сообщений с низким приоритетом.

Отправка и подтверждение доставки сообщений

  • Журналирование операций: Все операции с сообщениями регистрируются в журнале брокера на диске, что позволяет восстановить сообщения в случае отключения сервера.

  • Срок действия сообщений: Отправитель может указать срок действия сообщения в миллисекундах. По истечении этого времени сообщение не будет доставлено потребителям.

  • Удаление просроченных сообщений: Брокер может удалять сообщения с истекшим сроком действия или перемещать их на отдельный адрес.

Обработка ошибок

  • HTTP: Ошибка возвращается вызывающей системе в виде кода состояния и тела сообщения.

  • File: В случае ошибки выполняется перемещение файла, его восстановление в изначальной папке или запуск специального обработчика.

Повторная доставка сообщений

Параметры повторной доставки:

  • redelivery-delay: Время между попытками доставки;

  • redelivery-delay-multiplier: Коэффициент изменения времени для очередной попытки;

  • max-redelivery-delay: Ограничение времени, после которого прекращаются попытки повторной отправки;

  • max-delivery-attempts: Количество попыток, после которых прекращаются попытки повторной отправки;

  • dead-letter-address: Адрес для перемещения сообщений, которые не удалось доставить потребителям;

Хранение больших сообщений

Брокер поддерживает настройку отдельной директории для хранения сообщений, превышающих указанное пороговое значение. Параметры: large-messages-directory и minLargeMessageSize.

Группировка сообщений

В интеграционных маршрутах можно объединять в группы сообщения, которые попадают в брокер и будут обработаны только одним потребителем. Для этого используется служебный заголовок JMSXGroupID.

Если один потребитель не может обработать все сообщения в группе, вся группа передается другому потребителю.

Мост между серверами или кластерами

Брокер позволяет настраивать мост между отдельными серверами или кластерами. Мосты можно настроить так, чтобы обеспечить однократную гарантию доставки даже в случае сбоя исходного или целевого сервера.

Мост имеет встроенную устойчивость к сбоям, поэтому в случае потери соединения с целевым сервером, например из-за сбоя сети мост будет повторять попытку подключения к цели, пока она не вернется в режим онлайн. Когда он снова появится в сети, он возобновит работу в обычном режиме.

Шаблоны корпоративной интеграции

  • Dead Letter Channel: Позволяет повторную обработку сообщения с последующей отправкой по адресу deadLetterUri, если все попытки доставки израсходованы. Для реализации данного шаблона используется обработчик ошибок DeadLetterChannel. Подробнее: DeadLetterChannel.

  • Try Catch Finally: Реализация точечной обработки ошибок. Подробнее: Try Catch Finally.

  • Управление потоками: Позволяет конфигурировать пул потоков. Подробнее: Threads EIP.

  • Конкурирующие потребители: Включение дополнительных потребителей у подготовленных для этого компонентов. Подробнее: Competing Consumers.