You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
*[Testing Support](modelling/testing-support/README.md) - Comprehensive testing tools for message-driven applications
119
-
*[Testing Messaging](modelling/testing-support/testing-messaging.md) - Basic setup and testing fundamentals
120
-
*[Testing Aggregates and Sagas with Message Flows](modelling/testing-support/testing-aggregates-and-sagas-with-message-flows.md) - Business logic flow testing
121
-
*[Testing Event Sourcing Applications](modelling/testing-support/testing-event-sourcing-applications.md) - Event sourcing specific patterns
Copy file name to clipboardExpand all lines: enterprise.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,9 +4,8 @@
4
4
5
5
Ecotone comes with two plans:
6
6
7
-
***Ecotone Free** comes with [Apache License Version 2.0](https://github.com/ecotoneframework/ecotone-dev/blob/main/LICENSE) for open features. It allows to build message-driven system in PHP, which solves resiliency and scalability at the architecture level. This covers all the features, which are not marked as Enterprise. \
8
-
9
-
***Ecotone Enterprise** is based Enterprise licence. It does provides more advanced set of features aim for Enterprise usage. It does bring to the table custom features, additional integrations, and ability to optimization resource usages. 
7
+
***Ecotone Free** comes with [Apache License Version 2.0](https://github.com/ecotoneframework/ecotone-dev/blob/main/LICENSE) for open features. It allows to build message-driven system in PHP, which solves resiliency and scalability at the architecture level. This covers all the features, which are not marked as Enterprise. \\
8
+
***Ecotone Enterprise** is based Enterprise licence. It does provides more advanced set of features aim for Enterprise usage. It does bring to the table custom features, additional integrations, and ability to optimization resource usages.
10
9
11
10
{% hint style="success" %}
12
11
Each Enterprise feature is marked with hint on the documentation page. Enterprise features can only be run with licence key.\
@@ -17,14 +16,15 @@ To subscribe to Enterprise plan, visit [https://ecotone.tech/pricing](https://ec
17
16
## Available Enterprise Features
18
17
19
18
*[**Kafka Support**](modules/kafka-support/) - Enables integration with Kafka (Event Streaming Platform) to send, receive from Messages from topics, and to use Kafka in form of Message Channel abstraction for seamless integration into the System.
20
-
*[**Rabbit Consumer**](modules/amqp-support-rabbitmq/rabbit-consumer.md) - Provides ability to set up whole consumption process with single Attribute, and to extend it with resiliency patterns like: instant-retry, dead letter or final failure strategy. 
19
+
*[**Rabbit Consumer**](modules/amqp-support-rabbitmq/rabbit-consumer.md) - Provides ability to set up whole consumption process with single Attribute, and to extend it with resiliency patterns like: instant-retry, dead letter or final failure strategy.
21
20
*[**Dynamic Message Channels**](modelling/asynchronous-handling/dynamic-message-channels.md) - Provides ability to simplify deployment strategy, adjusting asynchronous processing to business scenarios, and configure processing per Client dynamically (which is especially useful in Multi-Tenant and SAAS environments).
22
21
*[**Event Sourcing Handlers with Metadata**](modelling/event-sourcing/event-sourcing-introduction/working-with-metadata.md#enterprise-accessing-metadata-during-event-application) - Provides ability to pass Metadata to Aggregate's Event Sourcing Handlers. This can be used to to adjust Aggregate's reconstruction process, based on Metadata information stored in related Events.
23
22
*[**Asynchronous Message Buses**](modelling/asynchronous-handling/asynchronous-message-bus-gateways.md)**-** This grants ability to build customized Command/Event Buses where Message will first go over given Asynchronous Channel. This can be used to build for example Outbox Command Bus.
24
23
*[**Distributed Bus with Service Map**](modelling/microservices-php/distributed-bus/distributed-bus-with-service-map/) - Provides way to communicate between Services (Applications) with ease and in explicit and decoupled way. Make it possible to use all available Message Channels providers (RabbitMQ, Amazon SQS, Redis, Dbal, Kafka, Symfony Message Channels, Laravel Queues).
25
-
*[**Command Bus Instant Retries**](modelling/recovering-tracing-and-monitoring/resiliency/retries.md#customized-instant-retries) - Provides ability to roll out new Command Bus with custom retry configuration. Allows to help in self-healing from scenarios like during HTTP request - external service went down, or our database connection was interrupted. 
24
+
*[**Command Bus Instant Retries**](modelling/recovering-tracing-and-monitoring/resiliency/retries.md#customized-instant-retries) - Provides ability to roll out new Command Bus with custom retry configuration. Allows to help in self-healing from scenarios like during HTTP request - external service went down, or our database connection was interrupted.
26
25
*[**Command Bus Error Channel**](modelling/recovering-tracing-and-monitoring/resiliency/error-channel-and-dead-letter/#command-bus-error-channel)- Provides ability to configure Error Channel for Command Bus. This way we can handle with grace synchronous scenarios like failure on receiving webhook, by pushing the Message to Error Channel.
27
26
*[**Instant Aggregate Fetch**](modelling/command-handling/repository/repository.md#instant-fetch-aggregate) - Provides ability to fetch Aggregates directly without the need to access Repositories. This way we can keep the code focused on the business logic instead of orchestration level code.
27
+
*[**Orchestrators**](modelling/business-workflows/orchestrators.md) - Perfect for building **predefined and dynamic workflows** where the workflow definition is separate from the individual steps.
Copy file name to clipboardExpand all lines: modelling/business-workflows/connecting-handlers-with-channels.md
+27-69Lines changed: 27 additions & 69 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -27,6 +27,7 @@ public function place(PlaceOrder $command): void
27
27
```
28
28
29
29
**What happens behind the scenes:**
30
+
30
31
1. Ecotone creates a channel named `place.order`
31
32
2. Your handler listens to this channel
32
33
3. When you use the Command Bus, it sends messages to this channel
@@ -69,6 +70,7 @@ class ProcessOrder
69
70
```
70
71
71
72
**How the flow works:**
73
+
72
74
1. You send `PlaceOrder` to `verify.order` channel
73
75
2. The `verify()` method processes it and returns the command
74
76
3. Ecotone automatically sends the returned command to `place.order` channel
@@ -107,9 +109,10 @@ class ProcessOrder
107
109
```
108
110
109
111
**What this means:**
110
-
- ✅ `verify.order` can be called via Command Bus (entry point)
111
-
- ❌ `place.order` can only be reached through the workflow
112
-
- 🔒 This ensures orders are always verified before being placed
112
+
113
+
* ✅ `verify.order` can be called via Command Bus (entry point)
114
+
* ❌ `place.order` can only be reached through the workflow
115
+
* 🔒 This ensures orders are always verified before being placed
113
116
114
117
{% hint style="success" %}
115
118
**Extending Workflows**: You can easily add more steps by adding `outputChannelName` to any handler. To send messages to multiple handlers, use the [Router pattern](../../messaging/messaging-concepts/message-endpoint/message-routing.md).
@@ -118,9 +121,10 @@ class ProcessOrder
118
121
## Adding Asynchronous Processing
119
122
120
123
Sometimes you want parts of your workflow to run asynchronously (in the background). This is perfect for:
121
-
- Heavy processing that shouldn't block the user
122
-
- Ensuring messages aren't lost if something goes wrong
123
-
- Scaling parts of your workflow independently
124
+
125
+
* Heavy processing that shouldn't block the user
126
+
* Ensuring messages aren't lost if something goes wrong
127
+
* Scaling parts of your workflow independently
124
128
125
129
**Example**: Keep verification synchronous (fast feedback) but make order placement asynchronous (reliable processing):
126
130
@@ -152,6 +156,7 @@ class ProcessOrder
152
156
```
153
157
154
158
**What happens now:**
159
+
155
160
1.`verify()` runs immediately and returns a response
156
161
2. The message goes to a queue/background processor
157
162
3.`place()` runs later in the background
@@ -166,9 +171,10 @@ class ProcessOrder
166
171
## Adding Delays and Timeouts
167
172
168
173
Asynchronous handlers can also be delayed, which is perfect for business scenarios like:
169
-
- Giving customers time to complete actions
170
-
- Implementing timeout behaviors
171
-
- Scheduling follow-up actions
174
+
175
+
* Giving customers time to complete actions
176
+
* Implementing timeout behaviors
177
+
* Scheduling follow-up actions
172
178
173
179
**Example**: Give customers 24 hours to pay, then automatically cancel unpaid orders:
0 commit comments