Technology Blogs by Members
Explore a vibrant mix of technical expertise, industry insights, and tech buzz in member blogs covering SAP products, technology, and events. Get in the mix!
cancel
Showing results for 
Search instead for 
Did you mean: 
bhalchandraswcg
Contributor

Previous – Wire Tap | Index | Next – Message Store


This week, we'll explore another system management pattern known as Message History.

When do I use this pattern?


Message History is useful to analyse the error. The message history contains the list of components that the message has been through and the component that caused the error.

Message History in CPI


Accessing Message History using Apache Camel


As CPI uses Apache Camel, the message history is available as List of MessageHistory object in the Exchange.MESSAGE_HISTORY property on the Exchange.

The history can be accessed in the groovy script by simply reading the property on the message. In the code below, messageHistories variable will have the List of MessageHistory object. Later, all the message histories have simply been logged.
import com.sap.gateway.ip.core.customdev.util.Message
import org.apache.camel.Exchange

def Message processData(Message message) {

def messageHistories = message.getProperty(Exchange.MESSAGE_HISTORY)

def messageLog = messageLogFactory.getMessageLog(message)
messageLog.addAttachmentAsString('Message History', messageHistories.join('\n'), null)

return message
}

The sample output of the above script looks like this:

 


Sample Output


Here, the route Id 'Process_1' can be seen in the flow by clicking on the Integration Process and then clicking on the Technical Information button. And, similarly, we can find out node Id in the technical information of individual nodes, for example, the Log History Groovy Script node has Id 'CallActivity_6' or the line number 3 in the sample output above.



How to find the Id


As you can see, the message history is available through APIs using Apache Camel, but the Ids are determined by CPI and can't be set by us developers. However, not being able to set the Ids is trumped by the UI of Message History.

Accessing Message History through UI


The best part of CPI is that while the API is available to dig deep, the Message History can also be viewed visually in Monitoring.

For example, let's run the example from Content-based Router pattern.

In this run, the message was received by HTTPS Sender Adapter. Then the Country? Router chose the UK Branch based on the condition. Eventually, the message failed at the HTTP Receiver Adapter. And, all this information is available to the developer through Monitoring UI.


Failure


The developer can then select an individual step, either in the list view on the left or in the Integration Flow Model itsef. For example, clicking on HTTP step and then on Log Content shows the error.


Failure


Note that all these helpful debugging information is available at Info Log Level. In the Debug or Trace level, Message Content is also available. Whereas, in the None Log Level, no logs are available, including message history.

EIPinCPI Rating – 10/10


With the access to Message History through an excellent UI and also through APIs, the Message History pattern is implemented greatly giving great debugging capabilities to the CPI developer. Therefore, a full rating of 10 out of 10 is justified.

Conclusion


Message History is useful for root cause analysis. And, CPI has great implementation to access Message History both at the runtime using Java/Apache Camel API and after the message has been processed through UI.

References/Further Readings



Hope this helps,
Bala

Previous – Wire Tap | Index | Next – Message Store

2 Comments
Labels in this area