Creating Channel Joins
This section describes the process of joining channels on Universal Messaging realms. Channels are the logical rendezvous point for data that is published and subscribed .
Channels can be joined programmatically or by using the Universal Messaging Enterprise Manager as described below.
Joining channels using the Enterprise Manager creates a physical link between a source channel and a destination channel. Once created, any events published to the source channel will be republished onto the destination channel.
Joins can be created using filters , so that only specific events published to the source channel that match certain search criteria will be routed to the destination channel.
Joins can also be created in several configurations:
joins may be created between channels on a realm and a stores on another realm federated with the source realm;
joins can be created from channels on a clustered realm to stores within the same cluster. Non-clusterwide channels can be joined to cluster-wide stores, (but not vice versa);
channels can be joined from channels on one cluster to channels on another cluster by using inter-cluster joins (see Inter-Cluster Joins
Universal Messaging also supports joins where the destination (incoming) is a queue. Universal Messaging does not support joins where the source of the join is a queue.
The image below shows a realm that contains the cluster channels /eur/rates and /local/rates.
By selecting any of the cluster channels, then right-clicking, you can select the 'Join Channel' menu option. You will be presented with the join dialog for the selected cluster channel. This allows you to create a join from the channel to any other channel in any realm.
We can, for example, select /local/rates as the channel we wish to join to /eur/rates, as shown in the join dialog below, with a filter of CCY='EUR'. This will ensure that only those events with the event property CCY equal to 'EUR' occurring on /local/rates will be published to the /eur/rates channel.
The From Channel field represents the source channel and the To Store field represents the destination channel. By default, the From Channel field contains the name of the currently selected channel from which the join dialog was opened.
Clicking on the OK button will create the join.
By selecting the Joins tab panel for either the /local/rates channel or the /eur/rates channel, you will be presented with a panel that shows the join just created. The image below shows the display for the /eur/rates channel, which in this example is the destination channel. Selecting the newly created join will also show you any relevant filtering criteria that the join has been created with.
The table that shows the joins for a channel will indicate in the Type column whether the join is 'Outgoing' or 'Incoming'. An outgoing join indicates that the selected channel is the source for the join, whereas 'Incoming' indicates that the selected channel is the destination channel.
You can delete a join by selecting the join from the joins table, and clicking the Delete Join button. Joins can only be deleted in the Enterprise Manager from the source (outgoing) channel. If the destination channel (incoming) is selected, the Delete Join button will be disabled.
To add a joins between channels on different clusters, first create an inter-cluster connection between the two clusters. Next, simply select a realm in the desired destination cluster as the join destination in the dropdown menu, as below:
As with non-inter-cluster joins, these joins can be specified with filters and hop-counts. If realms in the destination cluster go down, the join will failover and will continue to deliver events so long as the destination cluster is formed.
Inter-cluster joins can also be formed programmatically .
When a channel is purged, the events in the channel can also be purged. To activate this feature, mark the checkbox Allow Purge.
An archival join is a specific type of join made between a channel and a queue, where events will not be checked for duplication. Events that are published to the source channel will appear in the destination queue. This may result in duplicate events in the queue if the queue has multiple sources.
If you use the optional Filter field, only the events matching the filter criteria will appear in the destination queue.
The channel join dialog contains a checkbox labelled Archival. This checkbox is available when you create a join from a channel to a queue. When you mark the checkbox, the join is defined as an archival join.
A typical scenario for using this feature is if you have multiple routes that messages can take to reach the same destination, and you want to retain all duplicates at the destination. For example:
if an event is duplicated at the source.
if an event is copied from channel A -> B -> C and from channel A -> D -> C.
if you define multiple paths over different network protocols between the same source and destination.
Without this feature, the duplicate detection would ensure that only one copy of the message is delivered to the destination queue.