Queue і Topic — це дві моделі обміну повідомленнями, які підтримує JMS: 1. Модель обміну повідомленнями в черзі точка-точка (PTP): За цією моделлю обміну повідомленнями один додаток (тобто виробник повідомлення) може надіслати повідомлення іншому додатку (тобто споживачу повідомлення). У цій моделі доставки тип призначення повідомлення є чергою (тобто екземпляр класу реалізації інтерфейсу призначення створюється екземпляром класу реалізації інтерфейсу Session шляхом виклику його методу createQueue і передачі імені черги). Повідомлення спочатку доставляється до певної черги на стороні сервера повідомлень, а звідти воно передається споживачу, який слухає цю чергу. Одна й та сама черга може асоціювати кількох виробників і споживачів повідомлень, але повідомлення може бути доставлене лише одному споживачу повідомлення. Якщо кілька споживачів повідомлень слухають повідомлення в черзі, сервер JMS визначає, який споживач отримує наступне повідомлення на основі принципу «хто перший, того й прийшов». Якщо жоден споживач повідомлення не слухає чергу, повідомлення залишається в черзі, доки споживач не підключиться до черги. Ця модель обміну повідомленнями є лінивою або опитувальною моделлю у традиційному розумінні. У цій моделі повідомлення не надсилаються автоматично споживачу повідомлення, а запитуються з черги споживачем повідомлення. 2. Модель обміну повідомленнями про публікацію/підписку (публікація/підрозділ): Завдяки цій моделі обміну повідомленнями додатки можуть надсилати одне повідомлення кільком споживачам повідомлень. У цій моделі доставки тип призначення повідомлення є темою (тобто екземпляр класу реалізації інтерфейсу Destination створюється екземпляром класу реалізації інтерфейсу Session шляхом виклику його методу createTopic і передачі імені теми). Спочатку повідомлення публікується на певній темі сервера повідомлень виробником повідомлення, який потім доставляє повідомлення всім споживачам, які підписалися на цю тему. Цілі теми також підтримують довгострокові підписки. Довгострокова підписка означає, що споживач зареєстрований у тематичній цілі, але може бути неактивним, коли повідомлення досягає адреси. Повідомлення буде отримано, коли споживач знову стане активним. Якщо жоден із споживачів не зареєстрований у тематичному напрямку, тема зберігає повідомлення лише для неактивних споживачів, які оформили довгострокову підписку. На відміну від моделі PTP-повідомлень, модель pub/sub дозволяє кільком підписникам за темою отримувати одне й те саме повідомлення. JMS зберігає повідомлення, доки всі підписники теми не отримають його. Модель pub/sub messaging по суті є push-моделлю. У цій моделі повідомлення транслюються автоматично, і споживачам не потрібно активно запитувати або опитувати теми, щоб отримувати нові повідомлення. Конкретні відмінності такі:
тип
| Тема
| Черга | Огляд
| Опублікувати Підписатися повідомлення Опублікувати підписки
| Точка-точка
| Держави не існує
| Дані теми за замовчуванням є безстанними.
| Дані черги за замовчуванням зберігаються як файл на сервері MQ, наприклад, активний MQ зазвичай зберігається у $AMQ_HOME\data\kr-store\data. Його також можна налаштувати як сховище бази даних.
| Гарантія цілісності
| Немає гарантії, що кожен дані, опублікований видавцем, буде прийнятий підписником.
| Черга гарантує, що кожен фрагмент даних може бути прийнятий отримувачем.
| чи буде повідомлення втрачено
| Загалом, коли видавець публікує повідомлення на тему, лише підрозділ, який слухає адресу теми, може отримати це повідомлення. Якщо немає підрозділу, тема втрачається.
| Відправник надсилає повідомлення цільовій черзі, і отримувач може отримувати повідомлення в цій черзі асинхронно. Повідомлення в черзі не будуть втрачені, якщо наразі немає отримувача, який міг би їх прийняти.
| Політика прийому повідомлень
| Політика публікації та отримання повідомлень «один до багатьох»: кілька сабреддітів, які слухають одну й ту ж адресу теми, можуть отримувати повідомлення, надіслані видавцем. Сабреддіт отримує сповіщення на mq-сервер
| Політики публікації та отримання повідомлень один на один, повідомлення, надіслані відправником, можуть бути отримані лише одним отримувачем. Після отримання отримувачем MQ-сервер повідомляє MQ-сервер про отримання, і MQ-сервер видаляє або виконує інші дії щодо повідомлень у черзі.
|
|