Очередь сообщений (или почтовый ящик) — в информатике — программно-инженерный компонент, используемый для межпроцессного или межпотокового взаимодействия внутри одного процесса. Для обмена сообщениями используется очередь.

Парадигма очереди сообщений сродни шаблону «издатель — подписчик» и обычно является частью более крупной системы промежуточного программного обеспечения, ориентированной на обработку сообщений. Большинство систем обмена сообщениями в своих API поддерживают модели как очереди сообщений, так и «издатель — подписчик».

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

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

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

Другие реализации позволяют передавать сообщения между различными компьютерными системами, потенциально подключая несколько приложений и несколько операционных систем. Эти системы очередей сообщений обычно обеспечивают расширенную функциональность для обеспечения устойчивости, чтобы гарантировать, что сообщения не будут «потеряны» в случае сбоя системы.

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

Затем приложение регистрирует программную процедуру, которая «слушает» сообщения, помещённые в очередь.

Второе и последующие приложения могут подключаться к очереди и передавать на неё сообщение.

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

Существует множество вариантов точной семантики передачи сообщений, в том числе: Долговечность — сообщения могут храниться в памяти, записываться на диск или даже передаваться в СУБД, если необходимость в надёжности указывает на более ресурсоёмкое решение. Политики безопасности — какие приложения должны иметь доступ к этим сообщениям? Политики очистки сообщений — очереди или сообщения могут иметь «время жизни». Фильтрация сообщений — некоторые системы поддерживают фильтрацию данных, так что абонент может видеть только сообщения, соответствующие заранее определённым критериям. Политики доставки — должны ли мы гарантировать доставку сообщения хотя бы один раз или не более одного раза? Политики маршрутизации — в системе со многими серверами очереди какие серверы должны получать сообщения или сообщения очереди? Политики дозирования — должны ли сообщения доставляться немедленно? Или система должна немного подождать и попытаться доставить много сообщений одновременно? Критерии очерёдности — когда сообщение должно считаться «помещённым в очередь»? Когда в одной очереди? Или когда быть перенаправленным, по крайней мере, в одну удалённую очередь? Или ко всем очередям? Уведомление о получении — издателю может потребоваться узнать, когда некоторые или все подписчики получили сообщение.

Все эти факторы могут существенно повлиять на семантику транзакций, надёжность и эффективность системы.

Стандарты и протоколы Исторически очередь сообщений использовала собственные закрытые протоколы, которые ограничивали способность различных операционных систем или языков программирования взаимодействовать в гетерогенном множестве сред.

Появились три стандарта, которые используются в реализациях очереди сообщений с открытым исходным кодом: Advanced Message Queuing Protocol (AMQP) — многофункциональный протокол очереди сообщений (STOMP) — простой текстовый протокол сообщений MQTT (ранее MQ Telemetry Transport) — протокол облегчённой очереди сообщений, особенно для встроенных устройств

Эти протоколы находятся на разных стадиях стандартизации и реализации. Первые два работают на том же уровне, что и HTTP, MQTT на уровне TCP/IP.

Синхронный или асинхронный Многие из широко известных протоколов связи используются синхронно. Протокол HTTP, используемый во Всемирной паутине и в веб-сервисах, предлагает наглядный пример, когда пользователь отправляет запрос на веб-страницу, а затем ждёт ответа.

Однако существуют сценарии, в которых синхронное поведение не подходит. Например, AJAX (асинхронный JavaScript и XML) можно использовать для асинхронной отправки текстовых, JSON- или XML-сообщений для обновления части веб-страницы с более релевантной информацией.

Реализация в UNIX В UNIX есть 2 распространенные реализации очередей. Одна является частью SYS V API, а другая — часть POSIX.

См. также Apache Kafka AMQP Amazon SQS Apache ActiveMQ Apache Qpid IBM WebSphere MQ Java Message Service MQTT RabbitMQ MSMQ

Примечания

Ссылки About Messages and Message Queues (Windows) mq_overview(7) Overview of POSIX message queues — Linux man page Linux message queue functions

Категория:Межпроцессное взаимодействие