Dbal Dead Letter

Dbal Dead Letter

Ecotone comes with full support for managing full life cycle of a error message by using Dbal Module.

  • Store failed Message with all details about the exception

  • Allow for reviewing error Messages

  • Allow for deleting and replaying error Message back to the Asynchronous Message Channels

Installation

Send Error Messages directly to Dead Letter:

If we configure default error channel to point to "dbal_dead_letter" then all Error Messages will land there directly:

config/packages/ecotone.yaml

ecotone:
  defaultErrorChannel: "dbal_dead_letter"

Try to recover with Retries first

We may also want to try to recover before we consider Message to be stored in Dead Letter:

config/packages/ecotone.yaml

ecotone:
  defaultErrorChannel: "errorChannel"

and then we use inbuilt Retry Strategy:

#[ServiceContext]
public function errorConfiguration()
{
    return ErrorHandlerConfiguration::createWithDeadLetterChannel(
        "errorChannel",
        //  retry strategy
        RetryTemplateBuilder::exponentialBackoff(1000, 10)
            ->maxRetryAttempts(3),
        // if retry strategy will not recover, then send here
        "dbal_dead_letter"
    );
}

Dead Letter Console Commands

Help

Get more details about existing commands

bin/console ecotone:deadletter:help

Listing Error Messages

Listing current error messages

bin/console ecotone:deadletter:list

Show Details About Error Message

Get more details about given error message

bin/console ecotone:deadletter:show {messageId}

Replay Error Message

Replay error message. It will return to previous channel for consumer to pick it up and handle again.

bin/console ecotone:deadletter:replay {messageId}

Replay All Messages

Replaying all the error messages.

bin/console ecotone:deadletter:replayAll

Delete Message

Delete given error message

bin/console ecotone:deadletter:delete {messageId}

Turn off Dbal Dead Letter

#[ServiceContext]
public function dbalConfiguration()
{
    return DbalConfiguration::createWithDefaults()
        ->withDeadLetter(false);
}

Managing Multiple Ecotone Applications

The above solution requires running Console Line Commands. If we want however, we can manage all our Error Messages from one place using Ecotone Pulse.

This is especially useful when we've multiple Applications, so we can go to single place and see if any Application have failed to process Message.

Last updated