2017-02-08 19 views
1

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

Что происходит, когда сообщение опубликовано в очереди без подписчика в 10:00? и подписчик с надлежащим фильтром подписывается в 10.02 AM в ту же очередь. Получает ли сообщение сообщение, когда подписчик подписывается после того, как сообщение дошло до брокера (я имею в виду, хранит ли он в памяти до тех пор, пока не найдет абонента)? что такое поведение по умолчанию? также отличается ли он от JMS, STOMP и AMQP?

ответ

1

AMQP брокеры, сообщения либо доставляются потребителям, которые подписываются на очереди, или когда потребители получают/вытягивают сообщения из очередей по требованию. Сообщения остаются в очереди по умолчанию, даже если абонент не активен в настоящий момент. Сообщение будет сохранено на диске, если это постоянное сообщение и в памяти, если оно не является постоянным. https://www.rabbitmq.com/tutorials/amqp-concepts.html

STOMP: Адаптер RabbitMQ STOMP поддерживает несколько различных типов назначения. Сообщения, отправленные, когда ни один из абонентов не существует, будут поставлены в очередь до тех пор, пока абонент не подключится к очереди (в то время как тема будет удалять сообщения, если нет подключенных подписчиков). https://www.rabbitmq.com/stomp.html

JMS: JMS является API, он не использует протокол. AMQP - это протокол между клиентом обмена сообщениями и сервером обмена сообщениями. Клиент JMS может использовать AMQP в качестве протокола для взаимодействия с сервером обмена сообщениями. (ознакомьтесь с этой статьей для получения дополнительной информации о предмете https://spring.io/understanding/AMQP)

Однако сообщения, отправленные в очередь, остаются в очереди до тех пор, пока потребитель сообщения для этой очереди их не будет использовать. http://docs.oracle.com/javaee/6/tutorial/doc/bnceh.html и https://en.wikipedia.org/wiki/Java_Message_Service

+0

Только что нашел это на https://www.rabbitmq.com/stomp.html Целевые очереди доставляют каждое сообщение не более чем одному абоненту. Сообщения, отправленные, когда абонент не существует, будут поставлены в очередь до тех пор, пока абонент не подключится к очереди. – Madara

+0

благодарит за указание ссылок на Johansson – Madara

1

Поскольку вопрос упоминания о издателе и Абонента, я думаю, что вопрос для издатель-подписчик сообщений. В шаблоне Pub/Sub публикации помещаются в тему, а не в очередь.

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

В IBM MQ существует концепция «Сохранить публикацию». Когда в публикации установлен атрибут «Сохранить публикацию», IBM MQ Queue Manager сохранит копию такой публикации для темы, пока новая публикация не будет выпущена для той же темы. Предполагая, что публикация с «Сохранить публикацию» будет сделана в 10:00, когда абонент прибудет в 10:02, абонент получит эту публикацию.

Надеюсь, это поможет.

+0

Согласен, сообщения могут быть опубликованы на темы или биржи и т. Д. Но он говорит: «Когда сообщение опубликовано в очереди» - я предполагаю, что сообщение прошло обменом и уже успешно отправлено в очередь. – Johansson