Skip to Content
Technical Articles
Author's profile photo Bhalchandra Wadekar

EIPinCPI – Message Channel

Previous – Service Activator | Index | Next – Point-to-Point Channel

This week, we’ll study a pattern known as Message Channel.

When do I use this pattern?

Message Channel is a way to organise communication between two systems. When two systems want to talk, middleware is used. The middleware uses channels to receive messages and let other systems consume messages.

Message Channel in CPI

In CPI, I’ll explore how to create a queue to represent a channel. For the demonstration, I’ll fetch a product from Northwind OData Service and put it in a channel. Then, the product message will be consumed from the channel and logged into the message processing log.

Integration Flow – Fetch a Product

Fetch%20a%20Product

Fetch a Product

The integration flow starts immediately using a Timer Start Event, fetches a product from Northwind Service using OData Receiver Adapter, and sends it to ‘Products’ queue using JMS Receiver Adapter.

The configuration of the OData Receiver Adapter is as follows:

Tab Property Value
Connection Address https://services.odata.org/V2/Northwind/Northwind.svc
Connection CSRF Protected Unchecked
Processing Operation Details Query (GET)
Processing Resource Path Products
Processing Query Options $top=1

And, this is the configuration of JMS Receiver Adapter:

Property Value
Queue Name Products

The JMS Receiver Adapter creates the queue if it does not already exist and puts the message into the queue. In the context of this blog, a JMS Queue acts as a Message Channel.

Once the flow runs, we can see the message in the channel in monitoring.

A%20message%20in%20the%20Channel

A message in the Channel

Integration Flow – Consume from a Channel

Consume%20from%20a%20Channel

Consume from a Channel

The consumption of the message from a channel is achieved using the JMS Sender Adapter. In this flow, JMS Sender Adapter consumes the message in the specified channel and the Log script logs the message for monitoring.

The configuration of JMS Sender Adapter is the same as that of JMS Receiver Adapter:

Property Value
Queue Name Products

The Log Groovy Script code is as follows:

import com.sap.gateway.ip.core.customdev.util.Message

def Message processData(Message message) {
    
    def messageLog = messageLogFactory.getMessageLog(message)
    messageLog.addAttachmentAsString('Body', message.getBody(String), null)
    
    return message
}

When the integration flow is deployed the message is consumed and logged in monitoring:

Output

Output

EIPinCPI Rating – 10/10

As CPI has extensive support of JMS, the Message Channel pattern is fully supported in CPI. Therefore, the rating of 10/10 is justified.

Conclusion

Message Channels are a way of organising data flowing through the middleware. Sender(s) will put the message into a channel and Receiver(s) will consume the messages in a given channel.

References/Further Readings

Hope this helps,
Bala

Previous – Service Activator | Index | Next – Point-to-Point Channel

Assigned Tags

      1 Comment
      You must be Logged on to comment or reply to a post.
      Author's profile photo Fred king
      Fred king

      Thank you so much for the information keep suggesting us such informative post i will recommend this post to others keep sharing such post with us on such topics