Архитектура JMS для группового вещания
Я хочу построить систему вещания. Он состоит из нескольких групп. В каждой группе есть один пользователь, который может передать сообщение другим членам той же группы. Какова подходящая архитектура JMS для такого рода систем?
Должен ли я использовать тему с длительной подпиской? Я не очень разбираюсь в стиле паба / суб-сообщений, может ли тема иметь несколько подписок? Если это так, то каждая подписка представляет группу в системе вещания. Если нет, следует ли мне использовать очередь, в то время как каждое сообщение имеет заголовок, указывающий группу, а затем использовать селектор JMS для фильтрации сообщений, чтобы каждый участник получал только сообщения от групп, в которых он находится?
Кроме того, я думаю о сохранении сообщений после потребления. Я решил сделать так, чтобы срок действия каждого сообщения истек через час, и каждый участник должен проверять базу данных на каждое пропущенное сообщение. Но как я могу запустить действие по истечении срока действия сообщения?
1 ответ
Темы могут быть использованы... Темы могут иметь несколько подписчиков. Каждая группа может использовать разные темы. Пользователь может отправить сообщение в эту тему, и все подписчики получат его.
Постоянные подписчики требуются только в том случае, если подписчики могут на некоторое время отключиться от сети, и сообщения для подписчика не должны быть потеряны.
Очередь не подходит для сценариев "один ко многим". Но если у вас есть заранее заданный набор получателей, вы можете использовать очередь для каждого из них и направлять на нее сообщения. Но это накладные расходы для маршрутизации сообщений в очередь получателя. Идея селектора JMS, которую вы предложили, будет работать, но для очереди только один клиент может получить сообщение. По темам он распространяется среди всех клиентов, интересующихся этой темой.
Обычно можно сохранить данные в базе данных, а не само сообщение. Таким образом, вы можете сохранить в базе данных, а затем создать сообщение для доставки.