# Recovering, Tracing and Monitoring

A consumer crashes mid-handler. The Stripe webhook arrives twice. A `notify-customer` job fails forever and you can't tell why. Two workers race on the same aggregate and one's update gets silently overwritten. This section is the toolbox for everything that goes wrong after a message is dispatched.

Ecotone provides solutions across three concerns:

* **Self-healing** ([Instant and Delayed Retries](/modelling/recovering-tracing-and-monitoring/resiliency/retries.md), [Concurrency / Locking](/modelling/recovering-tracing-and-monitoring/resiliency/concurrency-handling.md), [Isolation of failures](/modelling/recovering-tracing-and-monitoring/message-handling-isolation.md))
* **Data Consistency** ([Resilient Message Sending](/modelling/recovering-tracing-and-monitoring/resiliency/resilient-sending.md), [Outbox pattern](/modelling/recovering-tracing-and-monitoring/resiliency/outbox-pattern.md), [Message Deduplication](/modelling/recovering-tracing-and-monitoring/resiliency/idempotent-consumer-deduplication.md))
* **Recovery & Visibility** ([Dead Letter](/modelling/recovering-tracing-and-monitoring/resiliency/error-channel-and-dead-letter.md), [Tracing](/modules/opentelemetry-tracing-and-metrics.md), [Monitoring](/modelling/recovering-tracing-and-monitoring/ecotone-pulse-service-dashboard.md))

{% hint style="success" %}
To find out more about different use-cases, read related section about [Handling Failures in Workflows](/modelling/business-workflows/handling-failures.md).
{% endhint %}

## Materials

### Demo implementation

* [Error Handling with delayed retries and storing in DLQ](https://github.com/ecotoneframework/quickstart-examples/tree/main/ErrorHandling)

### Links

* [Async Failure Recovery: Queue vs Streaming Channel Strategies](https://blog.ecotone.tech/async-failure-recovery-queue-vs-streaming-channel-strategies/) {Article]
* [Read in depth material about resiliency in Messaging Systems using Ecotone](https://blog.ecotone.tech/building-reactive-message-driven-systems-in-php/) \[Article]
* [Resilient Messaging with Laravel](https://blog.ecotone.tech/ddd-and-messaging-with-laravel-and-ecotone/) \[Article]
* [Making your application stable with Outbox Pattern](https://blog.ecotone.tech/implementing-outbox-pattern-in-php-symfony-laravel-ecotone/) \[Article]
* [Handling asynchronous errors](https://blog.ecotone.tech/working-with-asynchronous-failures-in-php/) \[Article]


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.ecotone.tech/modelling/recovering-tracing-and-monitoring.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
