Topics
A topic is the subject of the information that is published in a publish/subscribe message.
Messages in point-to-point systems are sent to a specific destination address. Messages in subject-based publish/subscribe systems are sent to subscribers based on the subject that describes the contents of the message. In content-based systems, messages are sent to subscribers based on the contents of the message itself.
The IBM MQ publish/subscribe system is a subject-based publish/subscribe system. A publisher creates a message, and publishes it with a topic string that best fits the subject of the publication. To receive publications, a subscriber creates a subscription with a pattern matching topic string to select publication topics. The queue manager delivers publications to subscribers that have subscriptions that match the publication topic, and are authorized to receive the publications. The article, Topic strings, describes the syntax of topic strings that identify the subject of a publication. Subscribers also create topic strings to select which topics to receive. The topic strings that subscribers create can contain either of two alternative wildcard schemes to pattern match against the topic strings in publications. Pattern matching is described in Wildcard schemes.
In subject-based publish/subscribe, publishers, or administrators, are responsible for classifying subjects into topics. Typically subjects are organized hierarchically, into topic trees, using the '/' character to create subtopics in the topic string. See Topic trees for examples of topic trees. Topics are nodes in the topic tree. Topics can be leaf-nodes with no further subtopics, or intermediate nodes with subtopics.
In parallel with organizing subjects into a hierarchical topic tree, we can associate topics with administrative topic objects. You assign attributes to a topic, such as whether the topic is distributed in a cluster, by associating it with an administrative topic object. The association is made by naming the topic using the TOPICSTR attribute of the administrative topic object. If we do not explicitly associate an administrative topic object to a topic, the topic inherits the attributes of its closest ancestor in the topic tree that you have associated with an administrative topic object. If we have not defined any parent topics at all, it inherits from SYSTEM.BASE.TOPIC. Administrative topic objects are described in Administrative topic objects. Note: Even if you inherit all the attributes of a topic from SYSTEM.BASE.TOPIC, define a root topic for the topics that directly inherits from SYSTEM.BASE.TOPIC. For example, in the topic space of US states, USA/Alabama USA/Alaska, and so on, USA is the root topic. The main purpose of the root topic is to create discrete, non-overlapping topic spaces to avoid publications matching the wrong subscriptions. It also means we can change the attributes of our root topic to affect your whole topic space. For example, you might set the name for the CLUSTER attribute.When you refer to a topic as a publisher or subscriber, you have a choice of supplying a topic string, or referring to a topic object. Or we can do both, in which case the topic string you supply defines a subtopic of the topic object. The queue manager identifies the topic by appending the topic string to the topic string prefix named in the topic object, inserting an additional '/' in between the two topic strings, for example, topic string/object string. Combining topic strings describes this further. The resulting topic string is used to identify the topic and associate it with an administrative topic object. The administrative topic object is not necessarily the same topic object as the topic object corresponding to the master topic.
In content based publish/subscribe, you define what messages we want to receive by providing selection strings that search the contents of every message. IBM MQ provides an intermediate form of content based publish/subscribe using message selectors that scan message properties rather than the full content of the message, see Selectors. The archetypal use of message selectors is to subscribe to a topic and then qualify the selection with a numeric property. The selector enables you to specify we are interested in values only in a certain range; something we cannot do using either character or topic-based wildcards. If we do need to filter based on the full content of the message, we need to use IBM Integration Bus.
- Topic strings
Label information you publish as a topic using a topic string. Subscribe to groups of topics using either character or topic based wildcard topic strings.- Combining topic strings
When creating subscriptions, or opening topics so we can publish messages to them, the topic string can be formed by combining two separate sub-topic strings, orsubtopics. One subtopic is provided by the application or administrative command as a topic string, and the other is the topic string associated with a topic object. We can use either subtopic as the topic string on its own, or combine them to form a new topic name.- Topic trees
Each topic that you define is an element, or node, in the topic tree. The topic tree can either be empty to start with or contain topics that have been defined previously using MQSC or PCF commands. We can define a new topic either by using the create topic commands or by specifying the topic for the first time in a publication or subscription.- Administrative topic objects
Using an administrative topic object, we can assign specific, non-default attributes to topics.- Streams and topics
Queued publish/subscribe has the concept of a publication stream that does not exist in the integrated publish/subscribe model. In queued publish/subscribe, streams provide a way of separating the flow of information for different topics. From IBM WebSphere MQ Version 7.0 onwards, a stream is implemented as a top-level topic that can be mapped to a different topic identifier administratively.- Subscription points and topics
Named subscription points are emulated by topics and topic objects.Parent topic: Publish/subscribe components