2016-11-01 2 views
1

Я не совсем понимаю, что это значит:JMS тема временная зависимость

Каждое сообщение может иметь несколько абонентов. Есть время зависимости, существующие между издателями и подписчиками; подписчиков на тему могут использовать только сообщения , опубликованные после создания подписки.

Что означает наличие «временных зависимостей»? Выше сказано, что «подписчики могут потреблять сообщения только после создания подписки», я думаю, что я пропустил что-то жизненно важное, потому что я понял, что, поскольку абонент не может использовать сообщение, которое еще не создано (но не этот здравый смысл).

Я не нашел никаких объяснений в Google, так что спасибо за любую помощь!

Редактировать: Я нашел отличный канал на youtube, объясняющий весенний ботинок и другие технологии. В частности, этот video помог мне понять разницу между очередью и темой (также и тем, кто долговечный абонент).

ответ

1

Что означает наличие «временных зависимостей»?

Чтобы лучше это понять, сравнить его с очередью JMS, в котором сообщении брокер сохраняет все сообщения (до TimeToLive срока) опубликованной производитель , даже если нет НИКАКИХ потребителей СОЗДАНЫ.

Теперь, приходя к теме JMS, сообщение брокер не сохраняет сообщения опубликованных производителем если нет НИКАКИХ абонентов СОЗДАНО.

При создании темы подписки, вы можете сказать о Message Broker, что я не хочу потерять сообщения по этой теме, опубликованной ОТНЫНЕ путем создания подписки темы как недлительные (с использованием topicSession.createDurableSubscriber()). Опять же, даже в случае недолгой подписки брокер сохраняет сообщения, опубликованные после (время создания подписки) до истечения срока действия TimeToLive.

+0

В бизнес-контексте, в котором я нахожусь, у нас есть API-интерфейс springboot, который необходим для прослушивания изменений из основного приложения и добавления/изменения db. В этом случае мы используем модель «постоянного абонента»? У нас есть еще несколько приложений springboot, которые прослушивают те же самые изменения из основного приложения. Следовательно, создаются отдельные очереди, и основное приложение отправляет одно и то же сообщение в эти отдельные очереди. Меня смущает, почему мы используем Queue вместо Topic. Я понимаю, что вам может быть трудно дать свое мнение без бизнес-контекста, но что вы думаете? – johnwick0831

+1

Является ли содержание сообщения точно таким же? Если ответ «да», нет смысла производить несколько очередей, так как он требует большой вычислительной мощности, а лишь воспроизводит только один раз в теме. – developer

+0

Да, сообщения одинаковы. Я проверил с другим разработчиком, и, похоже, причина, по которой мы не меняем тему, связана с бизнес-ограничениями (деньгами и временем). Спасибо за ваш ответ. – johnwick0831

0

Просто, если вы публикуете сообщения в теме до того, как потребитель подписался, они не будут видеть сообщения.

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

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

+0

Есть ли пример реального мира, когда потребитель намеренно не подписался, в результате чего теряются сообщения? – johnwick0831

+0

Просто упоминается, почему сообщения могут быть потеряны при отправке темы, у которой нет подписчиков. В основном это состояние гонки между подписчиком и продюсером. Если производитель побеждает, сообщения могут быть потеряны. Или, если по какой-то причине все абоненты закрывают свои подключения к брокеру. –

Смежные вопросы