EIPinCPI – Message Store

December 15, 2019 Bhalchandra Wadekar

This week, I’ll explore a system management pattern known as Message Store.

When do I use this pattern?

Message Store is used to persist the message or parts of it for reporting and analytics purpose. The Message can be stored in the persistence using a Wire Tap or by using a dedicated step.

Message Store in CPI

Storing the Message

In CPI, the message can be stored in Message Store using Persist step like so:

Persist

Persist

This flow starts immediately using the Timer Start Event, then Content Modifier step sets a Header, a Property, and the body of the message. Finally, Persist step will persist the message into the Message Store.

Accessing the Message

The persisted message can be accessed using CPI’s OData API.

Fetch the Message ID

First, let’s run the flow. When the flow is deployed we can view the Message ID in monitoring.

Deployed

Deployed

Get the Message Store Entry using the Message ID

Now, I can use the Message ID to fetch the message store entries by running HTTP GET on the URL:

https://<Tenant>/api/v1/MessageProcessingLogs(‘<Message ID>’)/MessageStoreEntries

Example output is like below. Here, we can see the entry for the Persist step from the flow.

<feed xmlns="http://www.w3.org/2005/Atom" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xml:base="https://<Tenant>:443/api/v1/">
    <id>https://<Tenant>:443/api/v1/MessageStoreEntries</id>
    <title type="text">MessageStoreEntries</title>
    <updated>2021-01-31T15:27:57.116Z</updated>
    <author>
        <name/>
    </author>
    <link href="MessageStoreEntries" rel="self" title="MessageStoreEntries"/>
    <entry>
        <id>https://<Tenant>:443/api/v1/MessageStoreEntries('sap-it-res%3Amsg%3Aa237a07a6%3Ad8402-e38e-4d13-9567-998eb2af638b')</id>
        <title type="text">MessageStoreEntries</title>
        <updated>2021-01-31T15:27:57.116Z</updated>
        <category term="com.sap.hci.api.MessageStoreEntry" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/>
        <link href="MessageStoreEntries('sap-it-res%3Amsg%3Aa237a07a6%3Ad8402-e38e-4d13-9567-998eb2af638b')" rel="edit" title="MessageStoreEntry"/>
        <link href="MessageStoreEntries('sap-it-res%3Amsg%3Aa237a07a6%3Ad8402-e38e-4d13-9567-998eb2af638b')/$value" rel="edit-media" type="application/octet-stream"/>
        <link href="MessageStoreEntries('sap-it-res%3Amsg%3Aa237a07a6%3Ad8402-e38e-4d13-9567-998eb2af638b')/Attachments" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Attachments" title="Attachments" type="application/atom+xml;type=feed"/>
        <link href="MessageStoreEntries('sap-it-res%3Amsg%3Aa237a07a6%3Ad8402-e38e-4d13-9567-998eb2af638b')/Properties" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Properties" title="Properties" type="application/atom+xml;type=feed"/>
        <content type="application/octet-stream" src="MessageStoreEntries('sap-it-res%3Amsg%3Aa237a07a6%3Ad8402-e38e-4d13-9567-998eb2af638b')/$value"/>
        <m:properties>
            <d:Id>sap-it-res:msg:a237a07a6:d8402-e38e-4d13-9567-998eb2af638b</d:Id>
            <d:MessageGuid>AGAWw8xxrAL7yJjy8kCGivUFXGQH</d:MessageGuid>
            <d:MessageStoreId>Persist</d:MessageStoreId>
            <d:TimeStamp>2021-01-31T14:50:52.396</d:TimeStamp>
            <d:HasAttachments>false</d:HasAttachments>
        </m:properties>
    </entry>
</feed>

 

Get the Body of the Message

The body of the message can be viewed by visiting the /$value path

https://<Tenant>/api/v1/MessageProcessingLogs(‘<Message ID>’)/MessageStoreEntries(‘sap-it-res%3Amsg%3Aa237a07a6%3Ad8402-e38e-4d13-9567-998eb2af638b’)/$value

The example output could be:

<Body />

Get the Headers of the Message

The headers are available at the /Properties path

https://<Tenant>/api/v1/MessageProcessingLogs(‘<Message ID>’)/MessageStoreEntries(‘sap-it-res%3Amsg%3Aa237a07a6%3Ad8402-e38e-4d13-9567-998eb2af638b’)/Properties

The example output is like below. Here, we can see standard headers like SAP_MplCorrelationId, SAP_PreGeneratedMplId, and SAP_MessageProcessingLogID. Custom header ‘Header’ is also listed here.

<feed xmlns="http://www.w3.org/2005/Atom" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xml:base="https://<Tenant>:443/api/v1/">
    <id>https://<Tenant>:443/api/v1/MessageStoreEntryProperties</id>
    <title type="text">MessageStoreEntryProperties</title>
    <updated>2021-01-31T15:36:33.128Z</updated>
    <author>
        <name/>
    </author>
    <link href="MessageStoreEntryProperties" rel="self" title="MessageStoreEntryProperties"/>
    <entry>
        <id>https://<Tenant>:443/api/v1/MessageStoreEntryProperties(MessageId='sap-it-res%3Amsg%3Aa237a07a6%3Ad8402-e38e-4d13-9567-998eb2af638b',Name='SAP_MplCorrelationId')</id>
        <title type="text">MessageStoreEntryProperties</title>
        <updated>2021-01-31T15:36:33.128Z</updated>
        <category term="com.sap.hci.api.MessageStoreEntryProperty" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/>
        <link href="MessageStoreEntryProperties(MessageId='sap-it-res%3Amsg%3Aa237a07a6%3Ad8402-e38e-4d13-9567-998eb2af638b',Name='SAP_MplCorrelationId')" rel="edit" title="MessageStoreEntryProperty"/>
        <content type="application/xml">
            <m:properties>
                <d:MessageId>sap-it-res:msg:a237a07a6:d8402-e38e-4d13-9567-998eb2af638b</d:MessageId>
                <d:Name>SAP_MplCorrelationId</d:Name>
                <d:Value>AGAWw8whkIvH4abnnWdrJ8C12kO_</d:Value>
            </m:properties>
        </content>
    </entry>
    <entry>
        <id>https://<Tenant>:443/api/v1/MessageStoreEntryProperties(MessageId='sap-it-res%3Amsg%3Aa237a07a6%3Ad8402-e38e-4d13-9567-998eb2af638b',Name='Header')</id>
        <title type="text">MessageStoreEntryProperties</title>
        <updated>2021-01-31T15:36:33.129Z</updated>
        <category term="com.sap.hci.api.MessageStoreEntryProperty" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/>
        <link href="MessageStoreEntryProperties(MessageId='sap-it-res%3Amsg%3Aa237a07a6%3Ad8402-e38e-4d13-9567-998eb2af638b',Name='Header')" rel="edit" title="MessageStoreEntryProperty"/>
        <content type="application/xml">
            <m:properties>
                <d:MessageId>sap-it-res:msg:a237a07a6:d8402-e38e-4d13-9567-998eb2af638b</d:MessageId>
                <d:Name>Header</d:Name>
                <d:Value>Value</d:Value>
            </m:properties>
        </content>
    </entry>
    <entry>
        <id>https://<Tenant>:443/api/v1/MessageStoreEntryProperties(MessageId='sap-it-res%3Amsg%3Aa237a07a6%3Ad8402-e38e-4d13-9567-998eb2af638b',Name='SAP_PregeneratedMplId')</id>
        <title type="text">MessageStoreEntryProperties</title>
        <updated>2021-01-31T15:36:33.129Z</updated>
        <category term="com.sap.hci.api.MessageStoreEntryProperty" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/>
        <link href="MessageStoreEntryProperties(MessageId='sap-it-res%3Amsg%3Aa237a07a6%3Ad8402-e38e-4d13-9567-998eb2af638b',Name='SAP_PregeneratedMplId')" rel="edit" title="MessageStoreEntryProperty"/>
        <content type="application/xml">
            <m:properties>
                <d:MessageId>sap-it-res:msg:a237a07a6:d8402-e38e-4d13-9567-998eb2af638b</d:MessageId>
                <d:Name>SAP_PregeneratedMplId</d:Name>
                <d:Value>AGAWw8xzG5YwLr1SYPHGi9qi_IR8</d:Value>
            </m:properties>
        </content>
    </entry>
    <entry>
        <id>https://<Tenant>:443/api/v1/MessageStoreEntryProperties(MessageId='sap-it-res%3Amsg%3Aa237a07a6%3Ad8402-e38e-4d13-9567-998eb2af638b',Name='SAP_MessageProcessingLogID')</id>
        <title type="text">MessageStoreEntryProperties</title>
        <updated>2021-01-31T15:36:33.129Z</updated>
        <category term="com.sap.hci.api.MessageStoreEntryProperty" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/>
        <link href="MessageStoreEntryProperties(MessageId='sap-it-res%3Amsg%3Aa237a07a6%3Ad8402-e38e-4d13-9567-998eb2af638b',Name='SAP_MessageProcessingLogID')" rel="edit" title="MessageStoreEntryProperty"/>
        <content type="application/xml">
            <m:properties>
                <d:MessageId>sap-it-res:msg:a237a07a6:d8402-e38e-4d13-9567-998eb2af638b</d:MessageId>
                <d:Name>SAP_MessageProcessingLogID</d:Name>
                <d:Value>AGAWw8xxrAL7yJjy8kCGivUFXGQH</d:Value>
            </m:properties>
        </content>
    </entry>
</feed>

Please note that here the path /Properties does not mean Exchange Properties, the path /Properties stores headers of the message.

If other standard headers for the sender, receiver, message type, application id are populated before persisting, then, using UI5 it will be easy to build reports based on these factors. For example, finding out the number of messages by a given sender of a given message type.

EIPinCPI Rating – 10/10

CPI has dedicated step and OData API to access the Message Store. Therefore, a complete 10 out of 10 rating is given.

Conclusion

Message Store is used for storing the message for reporting or analytics purpose.

References/Further Readings

Hope this helps,
Bala

About the Author

Bhalchandra Wadekar

Bhalchandra Wadekar is an Integration Enthusiast who authored the Enterprise Integration Patterns in SAP Cloud Platform Integration (#EIPinCPI) series on SAP Blog Community. He is a fan of integration from API Management and Open Connectors to Message Based Integration and Data Integration.

More Content by Bhalchandra Wadekar
Previous Article
Why Businesses Should Optimize Central Financing
Why Businesses Should Optimize Central Financing

Digital transformation is no longer just a buzzword for businesses, it’s an inevitable and necessary undert...

Next Article
EIPinCPI – Test Message
EIPinCPI – Test Message