как работает система очереди сообщений?

Я изучал систему очередей сообщений в своем классе, но до сих пор не понимаю, как эта система очередей сообщений работает в сценариях реального времени? Есть ли какой-нибудь учебник, который может помочь мне получить полную картину? Кто-нибудь может объяснить мне, как работают эти системы?


person Haider Ali    schedule 15.04.2013    source источник
comment
статья в Википедии — хорошее место для начала.   -  person Dave Newman    schedule 15.04.2013


Ответы (2)


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

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

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

Большинство API очередей сообщений также предлагают поддержку чтения сообщений из очереди на основе назначенного вами фильтра. Скажем, например, что вы считаете сообщения из потока, критического по времени, более важными, чем другие сообщения. Вы можете каждый раз, когда вы проверяете свою очередь на наличие сообщений, сначала проверять сообщения из критического потока и сначала обслуживать эти сообщения. Затем ваш поток продолжит обработку остальных сообщений в обычном режиме, если больше не будут найдены сообщения из критического потока.

Учебник C по очередям сообщений UNIX

person Dave Newman    schedule 15.04.2013

Это сложная тема, но если говорить просто:

Очереди сообщений — это один из наилучших способов реализации распределенных систем, если не лучший.

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

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

И, наконец, вы можете спросить, для чего все это хорошо? Это хорошо для реализации приложений с большим количеством движущихся частей, называемых узлами, которые нуждаются в мониторинге в реальном времени и возможностях реагирования в реальном времени. Подводя итог, они обеспечивают: параллелизм (узлы действительно могут работать параллельно), тесную интеграцию (все узлы видят одни и те же сообщения в одном и том же порядке), развязку (узлы могут развиваться независимо), отказоустойчивость/избыточность (при сбое одного узла может работать другой). быть запущенным и создавать состояние для немедленного принятия на себя), масштабируемость/балансировка нагрузки (просто добавьте больше узлов), эластичность (узлы могут отставать во время пиков активности, не влияя на систему в целом) и отказоустойчивость (узлы могут выходить из строя/переставать работать, не принимая вся система отключена).

Прочтите эту статью, в котором подробно обсуждается инфраструктура очереди сообщений.

person rdalmeida    schedule 16.04.2015