# Ecotone Blog — PHP Messaging, DDD & Event Sourcing > Ecotone gives you a set of composable building blocks on a single messaging foundation. You write the business logic, Ecotone glues the rest - by providing composable building blocks working on top of your current infrastructure. Public Ghost content for AI and LLM tooling. Use `/llms-full.txt` for consolidated page and post context. Append `.md` to any post or page URL to get the content in Markdown (for example, `/example-post.md`). ## Pages _No public content available._ ## Posts - [Tempest + Ecotone: One Declarative Foundation](https://blog.ecotone.tech/tempest-ecotone-one-declarative-foundation.md) - Tempest and Ecotone share one foundation — declarative configuration. Installing ecotone installs an architecture layer: CQRS, event sourcing, workflows and resilient async, with the whole messaging layer in to your Tempest App. - [Ecotone's support for Closures in Attributes](https://blog.ecotone.tech/ecotones-support-for-closures-in-attributes.md) - Replace expression strings and one-off middleware with typed closures in PHP attributes: dynamic delays, headers, and SQL parameters in one line, checked by PHPStan. - [Evolve Live Projections Without Downtime](https://blog.ecotone.tech/evolve-live-projections-without-downtime.md) - Add columns, fix bugs, and replay events on live projections without downtime — using backfill, rebuild, and blue-green in Ecotone's ProjectionV2 for PHP. - [Stop Subscribing to Domain Events](https://blog.ecotone.tech/stop-subscribing-to-domain-events.md) - The notification fires before the projection commits. The user sees a stale balance. Emitting derived events from inside the projection — as the read model — closes the race for good. - [When One Worker Can't Keep Up: Scaling Projections](https://blog.ecotone.tech/when-one-worker-cant-keep-up-scaling-projections.md) - Scale event sourcing projections with partitioned processing, track-based gap detection, and streaming. Learn how Ecotone handles concurrent transactions. - [Your Projections Will Fail — Make Them Resilient](https://blog.ecotone.tech/your-projections-will-fail-make-them-resilient.md) - Decouple projections from command handlers with async execution. Learn self-healing, failure isolation, batching, and polling in Ecotone's ProjectionV2. - [Why Projections Exist — Your First Read Model](https://blog.ecotone.tech/why-projections-exist-your-first-read-model.md) - Learn why Event Sourcing needs projections and build your first read model with Ecotone's ProjectionV2. Lifecycle hooks, state, and CLI included. - [DDD Was Never the Problem. Your Rules Were.](https://blog.ecotone.tech/ddd-was-never-the-problem-your-rules-were.md) - DDD doesn't have to mean dozens of classes and layers of abstraction. Practical DDD aimed for business side of things will produce less code than CRUD. - [Make your Domain speak the business language](https://blog.ecotone.tech/make-your-domain-speak-the-business-language-2.md) - Why organizing your DDD domain layer into Aggregates/, ValueObjects/, and Repositories/ folders undermines the very goal of Domain-Driven Design. - [Ecotone Agentic Skills on your command](https://blog.ecotone.tech/building-event-sourcing-ddd-cqrs-with-agentic-skills-in-php.md) - Every Developer has that list of patterns they'll learn "someday." Event Sourcing. CQRS. Sagas. What if the gap between knowing these exist and actually building with them just collapsed? - [AI Isn't the Problem. Your Architecture Is](https://blog.ecotone.tech/ai-isnt-the-problem-your-architecture-is.md) - AI coding assistants have created a velocity paradox. Developers ship code 55% faster, but that AI-generated code shows 41% higher churn rates (rotation of the code). When you're adding features at twice the speed, architectural mistakes compound at twice the rate too. - [What If 80% of Your Workflow Code Shouldn't Exist?](https://blog.ecotone.tech/three-different-ways-to-build-workflows.md) - Before reaching for state machines or saga patterns, ask yourself: is this actually a multi-step process, or just a delayed action? The answer will save you hundreds of lines of code. - [Your Legacy PHP Codebase Isn't Hopeless](https://blog.ecotone.tech/your-legacy-php-codebase-isnt-hopeless.md) - You ship a small bug fix. Suddenly, two other features break. Every deployment feels like gambling. The business depends on this app—it brings in revenue, customers use it daily—but nobody feels confident working on it. - [Vibe coding Enterprise PHP Applications](https://blog.ecotone.tech/vibe-coding-enterprise-php-applications.md) - Everyone's talking about vibe coding — describing what you want in natural language and letting AI generate the code. Solo developers are shipping features in hours and Startups are prototyping before lunch. But here's what nobody mentions at the demo stage: most vibe-coded applications are archite… - [Implementing Event-Driven Architecture in PHP](https://blog.ecotone.tech/implementing-event-driven-architecture-in-php.md) - Let's dive into how we can build Event-Driven Architecture in PHP using Smart Endpoint - Dumb Pipes approach. - [Message Brokers in PHP: From Hundreds of Lines to Just a Few](https://blog.ecotone.tech/message-brokers-in-php-few-lines-integration.md) - Message broker integration in PHP can be wrestling with exchange declarations, queue bindings, consumer configurations, and endless boilerplate. Setting up RabbitMQ, Kafka, or SQS often takes more code than the actual business logic we're trying to run asynchronously. But what if that wouldn't need… - [Async Failure Recovery: Queue vs Streaming Channel Strategies](https://blog.ecotone.tech/async-failure-recovery-queue-vs-streaming-channel-strategies.md) - Master failure recovery for queues and streams. Learn when each strategy works and why. Build message-driven systems that self-heal. - [Building Workflows in PHP](https://blog.ecotone.tech/building-workflows-in-php.md) - Almost any business requires workflows. Whether you're processing orders, onboarding customers, or handling document approvals, these processes are the beating heart of your application. Yet for most PHP developers, workflows become sources of frustration rather than competitive advantages. Often b… - [Write Only Business Logic: Eliminate Boilerplate](https://blog.ecotone.tech/write-only-business-logic-eliminate-boilerplate.md) - Learn how declarative configuration eliminates application services, complex controllers & routing logic. And reduce code needed for building feature even by 70%. - [Message Channels: Zero-Configuration Async Processing](https://blog.ecotone.tech/message-channels-zero-configuration-async-processing.md) - Learn how to add async processing to PHP applications with zero configuration. - [Advanced Messaging in PHP: Kafka, Distributed Bus and Dynamic Channels](https://blog.ecotone.tech/ecotone-enterprise-kafka-distributed-bus-dynamic-channels-and-more-2.md) - Ecotone provides now Enterprise set of features to enhance PHP applications with Kafka, Cross-Service communication, and Dynamic Channels. - [Robust and Developer friendly Application Architecture in PHP](https://blog.ecotone.tech/building-resilient-and-scalable-systems-by-default.md) - Let’s explore architecture in which scalability and resiliency are side effect of our daily development, not something we struggle for. - [Practial Domain Driven Design](https://blog.ecotone.tech/practial-domain-driven-design.md) - We get confidence by practice, not by theory. And by practice we actually get to know what is DDD about. - [Building Workflows in PHP with Ecotone](https://blog.ecotone.tech/building-workflows-in-php-with-ecotone.md) - Almost any business requires Workflows. Therefore it’s important to have ability to keep them maintainable and easy to understand. - [Integrating PHP Applications with Ecotone and RabbitMQ](https://blog.ecotone.tech/integrating-php-applications-with-ecotone-and-rabbitmq.md) - Communication between Applications can be really challenging, yet with higher level abstraction we can make the integration effortless. - [Symfony Multi-Tenant Applications with Ecotone](https://blog.ecotone.tech/symfony-multi-tenant-applications-with-ecotone.md) - Let’s discuss how can we build Multi-Tenant system with the least possible effort using Symfony, Doctrine ORM, CQRS with Ecotone. - [Laravel Multi-Tenant Systems with Ecotone](https://blog.ecotone.tech/laravel-multi-tenant-systems-with-ecotone.md) - In this article we will focus on real life solutions for Multi-Tenant systems, which we can apply in Laravel based Applications with… - [Working with Databases using DDD Mindset](https://blog.ecotone.tech/working-with-databases-using-ddd-mindset.md) - Let’s forget about low level code like SQL execution, data mapping, and switch the focus to the business parts of the system. - [Message Based — Business Oriented Interfaces](https://blog.ecotone.tech/message-based-business-oriented-interfaces.md) - Messaging combined with Business Interfaces, can provide us with smooth development experience, testable code and a lot of extra features. - [DDD and Messaging with Laravel and Ecotone](https://blog.ecotone.tech/ddd-and-messaging-with-laravel-and-ecotone.md) - Let’s explore what is Resilient Messaging and how it can help us build systems that focus on business logic using DDD patterns. - [Finally, Tracing in PHP — Say Hello to OpenTelemetry](https://blog.ecotone.tech/tracing-using-opentelemetry.md) - Finally PHP receives production ready tooling for tracking business flows, communication between Services, errors and performance. - [Building your own Message-Driven Framework — Foundation](https://blog.ecotone.tech/building-message-driven-framework-foundation.md) - Let’s build our own Message-Driven Framework starting from proper abstraction based on Enterprise Integration Patterns. - [YOLO Message-Driven Architecture](https://blog.ecotone.tech/yolo-message-driven-architecture.md) - The YOLO became a standard way of doing Messaging and is pretty straight forward to follow. We just need to counter basic rules of… - [My Database is not a Message Broker!](https://blog.ecotone.tech/my-database-is-not-a-message-broker.md) - Let’s ensure resiliency in our architecture without introducing Database as Message Broker. - [Building Blocks: Exploring Aggregates, Sagas, Event Sourcing with Ecotone](https://blog.ecotone.tech/building-blocks-exploring-aggregates-sagas-event-sourcing.md) - Learn how building blocks enable developers to build domain-focused applications while abstracting away the complexities of integration. - [Revolutionary BOA Framework: Ecotone](https://blog.ecotone.tech/revolutionary-boa-framework-ecotone.md) - Ecotone will change the way PHP application development is perceived thanks to enabling architecture oriented on the business. - [Building Reactive — Message Driven Systems in PHP](https://blog.ecotone.tech/building-reactive-message-driven-systems-in-php.md) - Applications in 2023 and beyond should be able to isolate failures, self-heal and scale. Let’s explore how can we make it true in PHP… - [Making your Application stable with Outbox Pattern](https://blog.ecotone.tech/implementing-outbox-pattern-in-php-symfony-laravel-ecotone.md) - When messages are sent to external broker and data is saved in database this may fail. Yet Outbox pattern comes to the rescue. - [Testing Asynchronous Message Driven Architecture](https://blog.ecotone.tech/testing-messaging-architecture-in-php.md) - How to write test for asynchronous message driven architecture and keeping it fast, easy to understand and write. - [Loosely coupled Microservices in PHP](https://blog.ecotone.tech/loosely-coupled-microservices-in-php.md) - In this article we will get deep into the subject of integrating Microservices in PHP and keeping them loosely coupled. - [Handling asynchronous errors in PHP with Laravel Queues, Symfony Messenger and Ecotone](https://blog.ecotone.tech/working-with-asynchronous-failures-in-php.md) - Learn how to handle asynchronous failures in PHP with Laravel Queues, Symfony Messenger and Ecotone - [Message Processing in PHP — Symfony Messenger, Laravel Queues and Ecotone](https://blog.ecotone.tech/message-processing-in-php-symfony-laravel-ecotone.md) - What is message processing and how is it implemented in Symfony Messenger, Laravel Queues and Ecotone Framework? - [Build Laravel Application using DDD and CQRS with Ecotone](https://blog.ecotone.tech/build-laravel-application-using-ddd-and-cqrs.md) - DDD becomes more and more popular in PHP World, check how to implement DDD Application in Laravel using Ecotone Framework - [Scheduling Execution in PHP](https://blog.ecotone.tech/scheduling-execution-in-php.md) - We often need to schedule execution of given business functionality. In this article we will check different types of schedules in PHP. - [Implementing Event Sourcing PHP Application in 15 minutes](https://blog.ecotone.tech/implementing-event-sourcing-php-application-in-15-minutes.md) - In this post we will jump straight to the code and we will implement Event Sourcing Application in 15 minutes. - [Starting with Microservices in PHP](https://blog.ecotone.tech/how-to-integrate-microservices-in-php.md) - Building Microservices in PHP may be complicated. Check how can you simplify this process using Ecotone Framework. - [How To Integrate Microservices](https://blog.ecotone.tech/how-to-integrate-microservices.md) - Check what is Messaging Architecture and how can it help you with integrating Microservices. - [Build Your Symfony Applications with ease using Ecotone](https://blog.ecotone.tech/build-symfony-application-with-ease-using-ecotone.md) - Check how to join Symfony and Ecotone, to allow for easy modifications, maintenance and future extensions. - [Make Your PHP Domain Speak the Business Language](https://blog.ecotone.tech/how-to-build-maintainable-php-applications.md) - Your PHP domain code should read like the business problem it solves — not like a framework manual. PHP attributes, plain classes, and a domain a new hire can understand in 30 seconds. - [Starting with Event Sourcing in PHP](https://blog.ecotone.tech/starting-with-event-sourcing-in-php.md) - How to build event-sourced aggregates and projections in PHP with Ecotone — native event store, snapshots, projections, replay, and tested in-memory. - [Async PHP Done Right — Per-Handler Channels](https://blog.ecotone.tech/asynchronous-php.md) - Why one attribute on a method beats hand-rolled queue workers in PHP. Per-handler channels, transactional outbox + RabbitMQ, and the same code on Symfony or Laravel. - [Event Handling in PHP — From Tangled Code to Clean Flows](https://blog.ecotone.tech/event-handling-in-php.md) - Stop cramming side effects into one PHP service. Use domain events with EventBus and per-handler isolation to split main flows from sub-flows — works on Symfony, Laravel, and standalone. - [CQRS in PHP — Stop Mixing Reads and Writes](https://blog.ecotone.tech/cqrs-in-php.md) - Why your PHP read methods are silently writing data — and how Command/Query separation with EventBus, CommandBus, and QueryBus fixes it. Examples for Symfony, Laravel, and standalone. - [Enterprise PHP in 2026: The Patterns You're Missing](https://blog.ecotone.tech/meet-ecotone-enterprise-ready-framework-for-php.md) - How modern PHP teams ship reliable, distributed systems in 2026 — outbox, sagas, event sourcing, and per-handler resiliency without rewriting Symfony or Laravel. ## Optional - [RSS Feed](https://blog.ecotone.tech/rss/) - [Sitemap](https://blog.ecotone.tech/sitemap.xml) - [Full content of pages and posts](https://blog.ecotone.tech/llms-full.txt)