Routed Topic Messages


A server forwards topic messages along routes only when the global property is defined for the topic; see addprop topic and create topic .

Topic messages can traverse multiple hops.

When a route becomes disconnected (for example, because of network problems), the forwarding server stores topic messages. When the route reconnects, the server forwards the stored messages.

Servers connected by routes do exchange messages sent to temporary topics.

Propagating Registered Interest

To ensure forwarding of messages along routes, servers propagate their topic subscriptions to other servers. For example, the top of Figure 25 depicts an enterprise with three servers—A, M and B—connected by routes in a multi-hop zone. The bottom of Figure 25 illustrates the mechanism at work within the servers to route messages from a producer client of server A, through server M, to server B and its subscriber client. Consider this sequence of events.

Figure 25 Routing: Propagating Subscribers
  1. All three servers configure a global topic T1.
  2. At bottom right of Figure 25, a client of server B creates a subscriber to T1.
  3. Server B, registers interest in T1 on behalf of the client by creating an internal subscriber object.
  4. Because a route connects servers M and B, server B propagates its interest in T1 to server M. In response, M creates an internal subscriber to T1 on behalf of server B. This subscriber ensures that M forwards (that is, delivers) messages from topic T1 to B. Server B behaves as a client of server M.
  5. Similarly, because a route connects servers A and M, server M propagates its interest in T1 to server A. In response, A creates an internal subscriber to T1 on behalf of server M. This subscriber ensures that A forwards messages from topic T1 to M. Server M behaves as a client of server A.
  6. When a producer client of server A sends a message to topic T1, A forwards it to M. M accepts the message on its topic T1, and forwards it to B. B accepts the message on its topic T1, and passes it to the client.

Subscriber Client Exit

If the client of server B creates a non-durable subscriber to T1, then if the client process exits, the servers delete the entire sequence of internal subscribers. When the client restarts, it generates a new sequence of subscribers; meanwhile, the client might have missed messages.

If the client of server B creates a durable subscriber to T1, then if the client process exits, the entire sequence of internal subscribers remains intact; messages continue to flow through the servers in store-and-forward fashion. When the client restarts, it can consume all the messages that B has been storing in the interim.

Server Failure

In an active-active route between servers B and M, if B fails, then M retains its internal subscriber and continues to store messages for clients of B. When B reconnects, M forwards the stored messages.

In an active-passive route configured on B, if B fails, then M removes its internal subscriber and does not store messages for clients of B—potentially resulting in a gap in the message stream. When B reconnects, M creates a new internal subscriber and resumes forwarding messages.

maxbytes

Combining durable subscribers with routes creates a potential demand for storage—especially in failure situations. For example, if server B fails, then server M stores messages until B resumes. We recommend that you set the maxbytes property of the topic (T1) on each server, to prevent unlimited storage growth (which could further disrupt operation).

Selectors for Routing Topic Messages

Motivation

A server forwards a global topic message along routes to all servers with subscribers for that topic. When each of those other servers requires only a small subset of the messages, this policy could potentially result in a high volume of unwanted network traffic. You can specify message selectors on routes, to narrow the subset of topic messages that traverse each route.

Message selectors on routes are different from message selectors on individual subscribers, which narrow the subset of messages that the server delivers to the subscriber client.

Example

Figure 26 illustrates an enterprise with a central server for processing customer orders, and separate regional servers for billing those orders. For optimal use of network capacity, we configure topic selectors so that each regional server gets only those orders related to customers within its region.

Figure 26 Routing: Topic Selectors, example

Specifying Selectors

Specify message selectors for global topics as properties of routes. You can define these properties in two ways:

Syntax

The message selector properties have the same syntax whether they appear in a command or in a configuration file:

 incoming_topic=topicName selector="messageSelector" 
 outgoing_topic=topicName selector="messageSelector" 

The terms incoming and outgoing refer to the perspective of the active server—where the route is defined.
topicName is the name of a global topic.
messageSelector is a message selector string. For detailed information about message selector syntax, see the documentation for class Message in TIBCO Enterprise Message Service Java API Reference.

Example Syntax

In the example of Figure 26, an administrator might configure these routes on the central order server:

setprop route Canada outgoing_topic="orders" selector="country=’Canada’" 
setprop route Mexico outgoing_topic="orders" selector "country=’Mexico’" 
setprop route USA    outgoing_topic="orders" selector="country=’USA’" 

Those commands would create these entries in routes.conf:

[Canada] 
url=ssl://canada:7222 
outgoing_topic=orders selector="country=’Canada’" 
... 
[Mexico] 
url=ssl://mexico:7222 
outgoing_topic=orders selector="country=’Mexico’" 
... 
[USA] 
url=ssl://usa:7222 
outgoing_topic=orders selector="country=’USA’" 
... 

Symmetry

outgoing_topic and incoming_topic are symmetric. Whether A specifies a route to B with incoming_topic selectors, or B specifies a route to A with outgoing_topic selectors, the effect is the same.

Active-Active Configuration

In an active-active configuration, you may specify selectors on either or both servers. If you specify outgoing_topic selector S1 for topic T on server A, and incoming_topic selector S2 for T on server B, then the effective selector for T on the route from A to B is (S1 AND S2).

See also Active and Passive Routes.

Wildcards

You can specify wildcards in topic names. For each actual topic, the server uses logical AND to combine all the selectors that match the topic.


TIBCO Enterprise Message Service™ User’s Guide
Software Release 4.3, February 2006
Copyright © TIBCO Software Inc. All rights reserved
www.tibco.com