Очередь и тема — это две модели обмена сообщениями, поддерживаемые JMS: 1. Модель обмена сообщениями по очереди (point-to-point, PTP): В этой модели обмена сообщениями одно приложение (то есть производитель сообщения) может отправить сообщение другому приложению (то есть потребителю сообщения). В этой модели доставки тип назначения сообщения является очередью (то есть экземпляр класса реализации интерфейса Destination создаётся экземпляром класса реализации интерфейса Session путём вызова его метода createQueue и передачи имени очереди). Сообщение сначала доставляется в определённую очередь на стороне сервера сообщений, а затем оно доставляется потребителю, который слушает эту очередь. Одна и та же очередь может ассоциировать нескольких производителей сообщений и потребителей сообщений, но сообщение может быть доставлено только одному потребителю сообщения. Если несколько потребителей сообщений прослушивают сообщения в очереди, сервер сообщений JMS определяет, какой потребитель получает следующее сообщение, исходя из принципа «кто первый пришёл — тот и первый пришёл». Если ни один пользователь сообщения не слушает очередь, сообщение остаётся в очереди до тех пор, пока пользователь не подключится к очереди. Эта модель обмена сообщениями является ленивой или опросовальной моделью в традиционном понимании. В этой модели сообщения не отправляются автоматически потребителю сообщения, а запрашиваются из очереди потребителем сообщения. 2. Модель публикации/подписки (pub/sub) тем: С помощью этой модели сообщений приложения могут отправлять одно сообщение нескольким потребителям. В этой модели доставки тип назначения — это тема (то есть экземпляр класса реализации интерфейса Destination создаётся экземпляром класса реализации интерфейса Session путём вызова его метода createTopic и введения имени темы). Сообщение сначала публикуется на определённую тему сервера сообщений создателем сообщения, который затем доставляет его всем потребителям, подписавшимся на эту тему. Тематические цели также поддерживают долгосрочные подписки. Долгосрочная подписка означает, что пользователь зачислен в цель по теме, но может быть неактивным, когда сообщение достигает цели назначения. Сообщение будет получено, когда потребитель снова будет активен. Если ни один из потребителей не зарегистрирован в тематическом направлении, тема сохраняет сообщения только для неактивных потребителей, которые оформили долгосрочную подписку. В отличие от модели обмена сообщениями PTP, модель pub/sub позволяет нескольким подписчикам по теме получать одно и то же сообщение. JMS хранит сообщение до тех пор, пока все подписчики темы не получат его. Модель сообщений в pub/sub по сути является push-моделью. В этой модели сообщения транслируются автоматически, и потребителям сообщений не нужно активно запрашивать или опрошивать темы, чтобы получать новые сообщения. Конкретные различия следующие:
тип
| Тема
| Очередь | Обзор
| Опубликовать Подписаться на сообщения Опубликовать подписочные сообщения
| Точка-точка-точка-точка
| Государства не существует
| Тематические данные по умолчанию безсостоятельны.
| Данные очереди по умолчанию сохраняются в виде файла на сервере MQ, например, Active MQ обычно хранится в $AMQ_HOME\data\kr-store\data. Его также можно настроить как хранилище баз данных.
| Гарантия целостности
| Нет гарантии, что каждая опубликованная издателем информация будет принята подписчиком.
| Очередь гарантирует, что каждый фрагмент данных может быть получен получателем.
| будет ли сообщение потеряно
| В общем, когда издатель публикует сообщение по теме, только сабреддит, который слушает адрес темы, может принять его сообщение. Если нет субреддита, тема теряется.
| Отправитель отправляет сообщение целевой очереди, и получатель может получать сообщения в этой очереди асинхронно. Сообщения в очереди не будут потеряны, если пока нет получателя, который мог бы их принять.
| Политика приёма сообщений
| Политика публикации и получения сообщений «один к многим»: несколько сабреддитов, слушающих один и тот же адрес темы, могут получать сообщения, отправленные издателем. Сабреддит получает уведомление на mq-сервер
| Политики публикации и получения сообщений один к одному, сообщения, отправленные отправителем, могут быть получены только одним получателем. После получения MQ-сервер уведомляет MQ-сервер о получении, и MQ-сервер удаляет или выполняет другие действия с сообщениями в очереди.
|
|