- To provide a simple example of how to implement
Domain Driven Design
andMessaging Architecture
in PHP. - To show how to implement
CQRS
,Event Sourcing
andHexagonal Architecture
in PHP. - To show how to implement
Resilient
andObservable
Microservices
in PHP.
Hello traveler, I am Dariusz Gafka author of Ecotone Framework.
With this project, I would like to show you that no matter of how complex your business is, you can build it in PHP.
It does not really matter if we work in E-Commerce
, ERP
or Finance based systems
, we can be sure that system will be resilient, observable and maintainable in long term.
And to make it happen we will use Open-Source
frameworks only, like Symfony
or Laravel
joined with Ecotone
.
Ecotone is production ready PHP Framework for building resilient, business oriented systems in PHP.
It provides you with all the tools you need to build Domain Driven Design
, CQRS
, Event Sourcing
and Hexagonal Architecture
in PHP.
It integrates with Symfony
and Laravel
and allows you to connect Services seamlessly using Microservice
or Event-Driven
architecture.
It's built continuously from 2017
and used in production by many companies.
By providing clean framework separation
, resiliency
and observability
, it provides highest level of confidence for building system in any business domain.
- Ecotone - PHP Framework for building resilient, business oriented system in PHP
- Symfony - PHP Framework for building web applications
- Laravel - PHP Framework for building web applications
- RabbitMQ - Message Broker for asynchronous communication
- Ecotone Pulse - Monitor for any processing errors and recover from failed messages.
- OpenTelemetry with Jaeger - Distributed Tracing for monitoring and troubleshooting microservices-based distributed systems
Customer Service
isLaravel+Ecotone application
, where customers can report issues. This happens usingCQRS
combined withEloquent Models
.
- Whenever new issue is reported, email is send to the with confirmation. This happens using
Asynchronous Event Handlers
, which are backed byRabbitMQ
.
Backoffice Service
isSymfony+Ecotone application
, where employees can be registered and work on the tickets.
All issues reported by customers are synchronized toBackoffice Service
and are correlated with tickets.
The synchronization betweenCustomer Service
andBackoffice Service
is done usingEvents
andDistributed Bus
for cross service communication viaRabbitMQ
.
- Employees can work on the tickets provides information about the status. As we want to know full history, Tickets are
Event-Sourced
.
From Event Sourced tickets we build differentRead Model Projections
, which are used to display information about the ticket.
- The whole communication between Services is monitored and traced using OpenTelemetry with
Jaeger
.
- Any issue that happens in the system is reported to
Ecotone Pulse
, which is used to recover from failed messages.
Run docker-compose up -d
to start all services.
Go to Customer Service to report issue as a customer.
Whenever issue is reported, confirming email will be sent to the customer, which can be found Mailbox.
First time email is sent it's set up for failing, so you can get feeling of working with system that can recover from error messages using Ecotone Pulse.
From Backoffice Service you may start working on ticket, that was correlated with issue reported by customer.
You may also check Jaeger to get full overview of how communication looks like and how each component behave and what is happening.