evoq_dead_letter (evoq v1.14.1)

View Source

Dead letter store for failed events.

Stores events that could not be processed after all retries. Provides API to: - Store failed events - List dead letter entries - Retry dead letter entries - Delete entries after successful reprocessing

Uses ETS for fast in-memory storage. For production, consider implementing a persistent store.

Summary

Functions

Get count of dead letter entries.

Delete a dead letter entry.

Get a specific dead letter entry by ID.

List all dead letter entries.

List dead letter entries with filters. Filters: - handler: Filter by handler module - since: Filter by created_at (milliseconds since epoch) - limit: Max number of entries to return

Retry a dead letter entry. Returns the event and handler for reprocessing.

Start the dead letter store.

Store a failed event in the dead letter queue.

Store a failed event with optional error reason.

Functions

count()

-spec count() -> non_neg_integer().

Get count of dead letter entries.

delete(Id)

-spec delete(binary()) -> ok | {error, not_found}.

Delete a dead letter entry.

get(Id)

-spec get(binary()) ->
             {ok,
              #evoq_dead_letter{id :: binary(),
                                event :: map(),
                                handler_module :: atom(),
                                error :: term(),
                                failure_context ::
                                    #evoq_failure_context{handler_module :: atom(),
                                                          event :: map(),
                                                          error :: term(),
                                                          attempt_number :: pos_integer(),
                                                          first_failure_at :: integer(),
                                                          last_failure_at :: integer(),
                                                          stacktrace :: list()},
                                created_at :: integer()}} |
             {error, not_found}.

Get a specific dead letter entry by ID.

list()

-spec list() ->
              [#evoq_dead_letter{id :: binary(),
                                 event :: map(),
                                 handler_module :: atom(),
                                 error :: term(),
                                 failure_context ::
                                     #evoq_failure_context{handler_module :: atom(),
                                                           event :: map(),
                                                           error :: term(),
                                                           attempt_number :: pos_integer(),
                                                           first_failure_at :: integer(),
                                                           last_failure_at :: integer(),
                                                           stacktrace :: list()},
                                 created_at :: integer()}].

List all dead letter entries.

list(Filters)

-spec list(map()) ->
              [#evoq_dead_letter{id :: binary(),
                                 event :: map(),
                                 handler_module :: atom(),
                                 error :: term(),
                                 failure_context ::
                                     #evoq_failure_context{handler_module :: atom(),
                                                           event :: map(),
                                                           error :: term(),
                                                           attempt_number :: pos_integer(),
                                                           first_failure_at :: integer(),
                                                           last_failure_at :: integer(),
                                                           stacktrace :: list()},
                                 created_at :: integer()}].

List dead letter entries with filters. Filters: - handler: Filter by handler module - since: Filter by created_at (milliseconds since epoch) - limit: Max number of entries to return

retry(Id)

-spec retry(binary()) -> {ok, map(), atom()} | {error, not_found}.

Retry a dead letter entry. Returns the event and handler for reprocessing.

start_link()

-spec start_link() -> {ok, pid()} | {error, term()}.

Start the dead letter store.

store(Event, HandlerModule, Evoq_failure_context)

-spec store(map(),
            atom(),
            #evoq_failure_context{handler_module :: atom(),
                                  event :: map(),
                                  error :: term(),
                                  attempt_number :: pos_integer(),
                                  first_failure_at :: integer(),
                                  last_failure_at :: integer(),
                                  stacktrace :: list()}) ->
               ok.

Store a failed event in the dead letter queue.

store(Event, HandlerModule, Evoq_failure_context, Reason)

-spec store(map(),
            atom(),
            #evoq_failure_context{handler_module :: atom(),
                                  event :: map(),
                                  error :: term(),
                                  attempt_number :: pos_integer(),
                                  first_failure_at :: integer(),
                                  last_failure_at :: integer(),
                                  stacktrace :: list()},
            term()) ->
               ok.

Store a failed event with optional error reason.