Comments (3)
Builds on eventuate-tram/eventuate-tram-core#179
from eventuate-tram-sagas.
Design overview
See NestedSagaTest and other classes in that package.
There are two sagas:
OuterSaga
- the saga, which has a participant that invokesInnerSaga
InnerSaga
- the saga that implements a step ofOuterSaga
SagaCommandHandler (part of OuterSaga
) that initiates InnerSaga
public class ParticipantCommandHandlers {
public CommandHandlers commandHandlerDefinitions() {
return SagaCommandHandlersBuilder
.fromChannel("customerService")
.onMessage(ReserveCreditCommand.class, this::reserveCredit)
private void reserveCredit(CommandMessage<ReserveCreditCommand> cm, CommandReplyToken commandReplyToken) {
InnerSagaData data = new InnerSagaData(commandReplyToken);
sagaInstanceFactory.create(innerSaga, data);
}
Key point: the command handler instantiates new InnerSagaData(commandReplyToken)
, which enables InnerSaga
to send a reply to OuterSaga
when it completes
Sending a reply when InnerSaga
completes
public class InnerSaga implements SimpleSaga<InnerSagaData> {
@Override
public void onSagaCompletedSuccessfully(String sagaId, InnerSagaData innerSagaData) {
SimpleSaga.super.onSagaCompletedSuccessfully(sagaId, innerSagaData);
commandReplyProducer.sendReplies(innerSagaData.getCommandReplyToken(), withSuccess());
}
from eventuate-tram-sagas.
Related Issues (20)
- io.eventuate.tram.commands.consumer.CommandWithDestinationBuilder.send is not working
- Posibillity to fork and join Sagas HOT 1
- Retry execution of command handler instead of triggering compensation HOT 1
- expectCompletedSuccessfully() should clearly explain why the saga did not complete successful
- Investigate usage of SagaParticipantStubManager
- Parameter 3 of method sagaCommandDispatcherFactory in io.eventuate.tram.sagas.spring.participant.SagaParticipantConfiguration required a bean of type 'io.eventuate.tram.commands.consumer.CommandReplyProducer' that could not be found. HOT 1
- Support conditional sending of notifications
- Improve exception handling for local saga steps HOT 2
- Proposal: 'Global' failure handlers for failed participants
- Implement onStartingCompensation() method
- Investigate flakey test: shouldReject HOT 4
- Separate orchestrator and participant schema
- Use flyway to configure eventuate DB schema HOT 1
- fix auto-configuration loading in Spring Boot 3
- No qualifying bean of type 'io.eventuate.tram.sagas.orchestration.SagaInstanceFactory' available
- ERROR: relation "eventuate.saga_instance" does not exist HOT 39
- java.lang.RuntimeException: No method for io.eventuate.tram.messaging.common.MessageImpl@5ae52f04 HOT 5
- ReactiveSaga not started if i use PostgreSQL HOT 4
- Implement a SagaManagerListener HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from eventuate-tram-sagas.