Previous – Invalid Message Channel | Index | Next – Guaranteed Delivery
This week, we'll study a pattern known as
Dead Letter Channel.
When do I use this pattern?
Dead Letter Channel is used for messages that were not delivered to the receivers. For example, if a message cannot be delivered because a receiver is down or the quota of calls is reached, then the message is moved to Dead Letter Channel. Note that, in CPI, implementation of Dead Letter Channel can only be used to tackle Node failure or Out of Memory issues.
Dead Letter Channel in CPI
In CPI, Dead Letter Channel can be used by changing the configuration on the
JMS Sender Adapter.
Integration Flow - Fetch Orders
Fetch Orders
This flow starts immediately using
Timer Start Event, sets the body using
Content Modifier, and pushes the message in JMS Queue 'Orders' using
JMS Receiver Adapter.
Configuration of JMS Receiver Adapter
Property |
Value |
---|
Queue Name |
Orders |
Encrypt Stored Message |
Unchecked |
Integration Flow - Send Orders
Send Orders
This flow fetches the Orders from 'Orders' queue using
JMS Sender Adapter and sends an email with contents using
Mail Receiver Adapter.
Configuration of JMS Sender Adapter
Property |
Value |
---|
Queue Name |
Orders |
Dead-Letter Queue |
Checked |
Please note that Dead-Letter Queue is checked and this will create a Queue that holds messages that have been failed to be delivered.
Configuration of Mail Receiver Adapter
Tab |
Property |
Value |
---|
Connection |
Address |
smtp.gmail.com:587 |
Connection |
Authentication |
Plain User/Password |
Connection |
Credential Name |
Google |
Processing |
From |
eipincpi@gmail.com |
Processing |
To |
eipincpi@gmail.com |
Output
We'll run the first flow once to have the message in the queue. Then, we'll run the second flow to consume the message.
If the number of orders placed is large enough, then there might be a node failure or out of memory error. In that case, the message is moved to the Dead Letter Queue. This message can be found in the Queue Monitor with status Blocked.
The messages can be moved back to the queue from Dead Letter Queue once the issue has been resolved by simply retrying them.
For more detailed information on Dead Letter Channel, check out
mandy.krimmel's blog on
configuring Dead Letter Handling in JMS Adapter.
EIPinCPI Rating - 8/10
With the support of JMS, CPI supports Dead Letter Channel. However, Dead Letter Channel only deals with issues inside CPI and the developer will need to create their own Dead Letter Queue similar to
Invalid Message Channel to handle the delivery issues. Therefore, in my opinion, this pattern gets 8 out of 10 EIPinCPI rating.
Conclusion
Dead Letter Channel is useful for storing messages that have failed delivery. Later, the messages could be moved to the original queue for retry. In CPI, only CPI's internal issues like node failure or out of memory error are handled in Dead Letter Channel.
References/Further Readings
Hope this helps,
Bala
Previous – Invalid Message Channel | Index | Next – Guaranteed Delivery