Point-to-point messaging across multiple buses
Point-to-point messaging uses queue destinations, where each queue destination represents a message queue.
A service integration queue destination is localized in a particular bus member (application server or server cluster). When a producer sends a message to the queue destination, the service integration bus delivers the message to a messaging engine in that bus member. The messaging engine then delivers the message to a consumer; if necessary, the messaging engine queues the message until a consumer is ready to receive it.
Applications can send messages to a queue destination in a remote bus, as long as a connection between the buses is configured. We can configure a bus to connect to, and exchange messages with, other messaging networks. To do this, configure a foreign bus connection. A foreign bus connection encapsulates information related to the remote messaging network, such as the type of the foreign bus and whether messaging applications are allowed to send messages to the foreign bus. The local bus knows of the destination bus through a foreign bus connection. If the bus that is directly connected to the local bus does not hold the specified destination, more service integration bus links are used to flow the message to the next bus on the route to the destination bus. When the message enters the destination bus, that bus attempts to deliver the message to the intended destination.
To send messages to a destination defined in a foreign bus, an application specifies the bus name (that is, the foreign bus) and the destination name in the JMS destination object (queue or topic). You do not need to configure any destination objects in the local bus. Service integration uses the definition of the foreign bus configured on the local bus, that is, the foreign bus connection. This definition includes default values for the destination attributes, such as the default quality of service. These default values apply to all destinations in that foreign bus.
We can configure a queue destination as a foreign destination or an alias destination, as described in the information about bus destinations.
When an application sends messages to a destination and a foreign destination or alias destination is not configured, the destination defaults are derived from the destination defaults specified for the foreign bus connection.
For example, an application is connected to Bus 1 (its local bus). The application sends a message to a JMS destination that specifies the bus name Bus 2 and the destination name targetQueue. The message is processed as follows:
- Service integration routes the message to Bus 2 using the definition in Bus 1 of the foreign bus Bus 2.
- Bus 2 delivers the message to targetQueue using the definition in Bus 2 of its local queue targetQueue.
In this example, service integration in Bus 1 uses attributes of its definition of the foreign bus, Bus 2, as defaults for its destination targetQueue in the foreign bus. Service integration cannot use configuration information that is scoped to a foreign bus. For example, service integration in Bus 1 is not aware of the Bus 2 definition of targetQueue.
In the following figure, a JMS application connected to Bus 1 creates a producer for a queue in Bus 2. The application uses JNDI to obtain a JMS destination object, which identifies the service integration bus queue in Bus 2. An application can obtain a JMS destination in other ways, for example, from the JMSReplyTo property of a JMS message.
Figure 1. Establishing point-to-point messaging between two buses
Key:
- The JMS application uses JNDI lookup to obtain the JMS destination.
- The JMS application sends the message to the JMS destination; this is a logical message flow.
- The local bus, Bus 1, transfers the message from the sending application to the foreign bus, Bus 2, which contains the target destination. Bus 1 applies default properties and destination roles form the foreign bus connection.
- The foreign bus places the message on the target destination.
Knowledge that a destination exists is held only by the bus that hosts that destination. For an application to send messages to a destination in a foreign bus successfully, you must ensure that the destination exists; the local bus cannot verify that the destination exists. If a message arrives through the service integration bus link for a destination that does not exist in the foreign bus, the message is routed using the exception handling configuration of the receiving service integration bus link.
An application cannot consume messages from a destination located in a different bus to the one that the application is connected to. Any attempt to create a consumer to a destination on a foreign bus is rejected.
Related concepts
Foreign destinations and alias destinations Workload sharing with queue destinations Bus destinations
Related tasks
Create a foreign destination on a bus Configure alias destination properties Configure destination defaults for a foreign bus connection