Messaging System– это распределенная система, основанная на асинхронном обмене сообщениями(messages) между компонентами системы. В Messaging System приложения общаются не напрямую, а посредством MOM(промежуточного программного обеспечения). Если один компонент системы хочет послать сообщение другому компоненту, он посылает данное сообщение MOM, а уж MOM затем пересылает его адресату.
MOM реализует асинхронность обмена сообщениями, что позволяет избавиться от недостатков предыдущих систем, в частности синхронных. Перечислим указанные преимущества МОМ:
* Приложение, пославшее сообщение, не должно ждать ответа, и может продолжать свою текущую деятельность (только для асинхронного).
* Ни приложение, посылающее сообщение, ни адресат данного сообщения не обязаны быть активными в одно и то же время (только для асинхронного). Если адресат сообщения не активен, то MOM гарантирует, что сообщение будет доставлено, как только адресат станет активным (только для асинхронного).
* Компоненты системы не связаны напрямую друг с другом (decoupled), а потому возможно перенесение компонентов с одного хоста на другой в runtime без ущерба для работоспособности системы (только для асинхронного).
Существует две "основных" модели обмена сообщениями:
* point-to-point
* publish-subscribe (pub-sub)
Point-to-point модель применяется, когда одному или нескольким компонентам (так называемые senders) необходимо послать сообщение одному компоненту-адресату (receiver).
Publish-subscribe (Pub-sub) модель применима, когда одному или нескольким компонентам (publishers) необходимо послать сообщение одному или нескольким компонентам-адресатам (subscribers). Данная модель основана на понятии message topic.
Часто говорят, что в point-to-point модели есть один и только один receiver.
Однако, это не совсем верно. Может существовать несколько receivers, присоединенных к одной и той же queue (очереди). Но MOM доставит каждое сообщение только одному из них. Какому именно – зависит от реализации. Некоторые MOM доставляют сообщение первому зарегистрированному receiver
Cледует помнить, что многие pub-sub системы не гарантируют доставку сообщений в том порядке, в каком они были посланы (в отличие от point-to-point, где queue реализует принцип first-in/first-out).
Задача сохранения порядка следования сообщений не тривиальна даже в случае одного topic.
При необходимости сохранение порядка доставки сообщений в случае множественных topics –сложность возрастает экспоненциально. Поэтому в случае pub-sub модели следует по возможности избегать ситуаций, когда порядок следования сообщений важен (либо использовать заголовки и раздел свойств сообщений для синхронизации).
Java Message Service (JMS) – это Java API (то есть набор интерфейсов и классов) для работы с Message-Oriented Middleware (МОМ). Данный набор определен в пакете javax.jms в дереве пакетов J2EE.