Сообщение с какого момента времени удалено из темы?

У меня есть тема. У меня на него подписано 10 потребителей. Насколько я понимаю, сообщение будет удалено из темы, пока его не получат все потребители. Верно? Как только оно будет удалено, дальнейшие подписчики не будут уведомлены об этом конкретном сообщении. Я нигде не смог подтвердить это в спецификации JMS.


person user3198603    schedule 26.02.2014    source источник
comment
Тогда это может быть специфично для реализации. Почему бы вам не написать тест, раскрывающий поведение?   -  person Boris Pavlović    schedule 26.02.2014


Ответы (2)


Брокер (в вашем случае Active MQ) будет доставлять публикацию всем активным подписчикам, как постоянным, так и временным (имеется в виду потребительские приложения, которые запускаются, когда публикация была сделана по теме, и потребляющие сообщения, а также любые постоянные подписчики, которые не являются активными). ). После этого брокер отклонит публикацию. Если на тему нет активных подписчиков или постоянных подписчиков, брокер немедленно отклонит публикацию. Он не будет ждать, пока какие-либо подписчики станут активными. Единственным исключением является вариант «Сохраненная публикация», когда брокер кэширует публикацию и доставляет ее потребителям, которые могут появиться позже. Но обратите внимание, что брокер не будет ждать, пока все потребители получат публикацию, прежде чем удалить ее из темы. Я бы сказал, что нет ничего лучше «удаления из темы».

Надеюсь, я ясно.

person Shashi    schedule 26.02.2014
comment
Вы сказали. Но обратите внимание, что брокер не будет ждать, пока все потребители получат публикацию, прежде чем удалить ее из темы, я думаю, вы имели в виду, что брокер доставит ее со своей стороны, но не ждет подтверждения от потребителя, получил он ее или нет? - person user3198603; 27.02.2014
comment
В зависимости от реализации Брокера каждому подписчику будет выделено место в Брокере для получения публикаций. Это пространство может быть очередью. Предполагая, что очереди используются, Broker поместит публикацию в эти очереди и продолжит обработку публикации из Publisher. Теперь, когда сообщения находятся в очередях, потребитель должен извлекать публикации из этих очередей. Именно это я имел в виду, когда сказал: «Брокер не ждет, пока потребители получат публикации». - person Shashi; 27.02.2014

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

person Jakub H    schedule 26.02.2014
comment
Якуб, я вас не понял. Вы пытаетесь сказать, что для непродолжительной подписки сообщение будет удалено, как только все активные подписчики получат сообщение. Для долговременной подписки сообщение будет удалено только тогда, когда все активные и неактивные подписчики получат сообщение. Это правильно? - person user3198603; 26.02.2014
comment
Да, это правильно. Имейте в виду, что каждый подписчик получает свою копию сообщения. - person Jakub H; 26.02.2014