Виртуальные темы / очереди и долговечность - PullRequest
5 голосов
/ 26 января 2012

Что произойдет с сообщениями, опубликованными в виртуальной теме, когда не будет прослушивать никаких потребителей?Будет ли брокер удерживать их некоторое время, пока не будет доступен абонент?

Более конкретно: в T0 и T1 сообщения M0 и M1 размещены.В Т2 подключается потребитель С1, получит ли он М0 и М1?Очевидно, что сообщения M2 и M3, отправленные в T3 и T4, будут получены C1, но что получит новый Потребитель, C2, который подключится к T5?Все сообщения, М2 и М3 или нет?

Ответы [ 3 ]

4 голосов
/ 04 февраля 2012

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

Для вашего примера я буду считать, что вы используетедолговременные подписки / потребители: Случай 1:

  • T-2 C1 и C2 делают длительную подписку на тему
  • T-1 C1 и C2 отключаются
  • T0:M0 опубликовано
  • T1: M1 опубликовано
  • T2: C1 подключено. C1 получает M0, а M1
  • T3: M3 опубликовано. C1 получает M3
  • T4: M4 опубликовано. C1 получает M4
  • T5: C2 подключается, C2 получает M0, M1, M2, M3, M4

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

Если вы используете недолговечные темы:

  • T-2 C1 и C2 делают обычную подписку натема
  • T-1 C1 и C2 разъединяются
  • T0: M0 отправлено
  • T1: M1 отправлено
  • T2: C1 подключено. C1 ничего не получает
  • T3: M3 опубликовано. C1 получает M3
  • T4: M4 опубликовано. C1 получает M4
  • T5: C2 подключается, C2 ничего не получает
1 голос
/ 14 января 2014

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

0 голосов
/ 28 февраля 2013

Почему не может быть наблюдателя / наблюдаемой модели - на примере выше:

Когда M0 публикуется, C1 и C2 (потребители подписываются) просыпаются и могут использовать событие?Я вижу эту модель лучше, чем долговечный и недолговечный - гибридный подход.

...