Message Channels

We have seen in the previous chapter that the MessageChannel interface has methods to send data using a Message object.

boolean send(Message message); 
boolean send(Message message, long timeout)

Both the methods above will take the Message as a parameter. The first method publishes the message but does not return control until it successfully executes the sending operation. This is not desirable due to wastage of CPU cycles. In this situation, the second send method takes over. When the message is not delivered for whatever reason after a predefined time, the second method steps in and throws an exception.

Note the return value of these methods, boolean, indicates the success or failure of the message delivery.

The timeout variable can be set to zero, positive, or negative values.

If the timeout variable is negative, the thread will block indefinitely until it is able to publish the message successfully. If it is set to zero, the send method will return instantly, whether the sending was successful or not. If it is greater than zero, the sending thread will honor that amount of time before throwing an error if it is unable to push the message to the channel.

The interesting point is that the MessageChannel interface does not define any methods for receiving messages. Receiving a message largely depends on the receiver’s semantics: Point-to-Point (P2P) or Publish/Subscribe (Pub/Sub).

In a P2P mode, only one receiver will get the message delivered, even if multiple receivers ...

Get Just Spring Integration now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.