- Decoupling of Producers and Consumers
- Producers and consumers do not know each other
- Flexible number of producers and consumers
Addressing ModelsWith pub-sub there are a number of addressing models.
- Channel or Topic based
- Subject based
- Content based
- Concept based (not further described here, but tries to describe interest on a high level)
Topic based addressingThis is simple but less powerfull. Example JMS topics.You basically get every message that is published on a particular topic. However you have the possibility to set a filter when a subscription is taken that will filter the messages on attributes in the header of the JMS message.
This is supported by BEA AquaLogic Service Bus.
Subject based addressingIt avoids the use of of physical network addresses. Messages are labeled with subject and consumers can subscribe on subjects. Producers do not need to know how messages are consumed and consumers do not need to know the source. There must be agreement on subject names and subjects can be added dynamically.The names consist of a hierarchy of elements: element.subelement.subsubelement.
Consumers can use wildcards: BOOK.* matches BOOK.TITLE and BOOK.> matches BOOK.TITLE.DESCR.
The disadvantage is that subject hierarchies can not be changed easily.
This type of addressing is supported Tibco's Rendezvous.
Content based addressingA content based filter is a predicate on the content of the messages.
JMSThe JMS publish and subscribe is a combination of Topics and expressions on envelope's attributes. Factories, Destinations are identified via JNDI.
The message header is used for addressing and extra message properties, which are name value pairs, can be set. A selector (SQL-like expressions) can be used by consumer to filter messages based on the header's properties.