Reliable messaging pattern
Reliable messaging involve sending a message successfully from one system to another over unreliable protocols. Although TCP/IP gives you reliability at a lower level, reliable messaging provide delivery guarantees at a higher level. If the recipient is unavailable, messages will be retransmitted over a defined period until it's successfully delivered.
Traditional SOA method of handling reliable messaging is through a framework/library that implements WS-ReliableMessaging specification. The pattern is illustrated here. A framework like Apache Sandesha provide reliable delivery guarantees according to the specification. From the reliable message specification (PDF) message exchange sequence is like this,
At each step there will be an XML message going back an forth the wire. This create a lot of additional overhead and as a result performance suffer.
Alternative approach using JMS
Looking at the communication overhead and complexity involved with creating/maintaining ReliableMessaging capable clients, an alternative approach using JMS is very popular. Simplicity of JMS and easy maintainability are key factors for JMS's success as a defacto solution used for reliable message delivery. You put messages to a queue and process messages from a queue.
Messaging with WSO2 platform
WSO2 ESB have a concept of messages stores and message processors. Message stores does what you expect. They store messages. Default implementation of message store is an in memory implementation. Also you have the option of pointing the message store to a queue in an external broker. Also there are standard extension points to extend the functionality and write a custom message store implementation.
Message processors are responsible for reading messages from a message store and sending it to another system. You can configure parameters at the message processor to have a flexible interval to poll for new messages, retry interval, delivery attempts and so on.
Advantages of using WSO2 for reliable messaging
ESB follows a configuration driven approach. Easy to configure, don't need to write code for large set of integration patterns
Protocol conversion comes naturally and don't have to do any extra work - Accepting an HTTP request and sending it to a JMS queue require you to specify the JMS endpoint only
Can take advantage of a large set of enterprise integration patterns
Simple config and deployment for simple scenarios. Complex scenarios are possible just be extending/integrating external brokers
Production deployment flexibility (single node, multiple nodes, on-prem, cloud, hybrid deployments)