Axon Saga (4.0) 不保留跨 @SagaEventHandler 方法的私有属性
Axon Saga (4.0) does not preserve private properties across @SagaEventHandler methods
我有这个代码:
@Saga
@Slf4j
public class ActionsSaga2 {
@Autowired
transient CommandGateway commandGateway;
@Autowired
transient ActionService actionService;
String id;
ApplicationState state;
@StartSaga
@SagaEventHandler(associationProperty = "applicationId")
public void on(ApplicationCreatedEvent event) {
id = event.getApplicationId();
state = event.getState();
commandGateway.send(ScheduleActionCommand.builder()
.applicationId(event.getApplicationId())
.actionId(id)
.targetState(event.getState())
.build());
}
@EndSaga
@SagaEventHandler(associationProperty = "applicationId")
public void on(ActionDoneEvent event) {
assert id != null;
}
}
首先@SagaEventHandler on(ApplicationCreatedEvent event)设置私有字段id和state .
但是在第二个 @SagaEventHandler on(ActionDoneEvent event) 两个属性都是空的。
我很确定调用被路由到同一个传奇(saga_entry 中唯一的记录在第二次方法调用后被删除)
你能帮我看看哪里出了问题吗?
我对 saga 没有特殊配置,使用 AxonServer 和 Spring boot
我找到了解决方案,问题出在关联属性。
正确的事件处理程序是
@EndSaga
@SagaEventHandler(associationProperty = "applicationId", keyName = "id")
public void on(ActionDoneEvent event) {
assert id != null;
}
我有这个代码:
@Saga
@Slf4j
public class ActionsSaga2 {
@Autowired
transient CommandGateway commandGateway;
@Autowired
transient ActionService actionService;
String id;
ApplicationState state;
@StartSaga
@SagaEventHandler(associationProperty = "applicationId")
public void on(ApplicationCreatedEvent event) {
id = event.getApplicationId();
state = event.getState();
commandGateway.send(ScheduleActionCommand.builder()
.applicationId(event.getApplicationId())
.actionId(id)
.targetState(event.getState())
.build());
}
@EndSaga
@SagaEventHandler(associationProperty = "applicationId")
public void on(ActionDoneEvent event) {
assert id != null;
}
}
首先@SagaEventHandler on(ApplicationCreatedEvent event)设置私有字段id和state .
但是在第二个 @SagaEventHandler on(ActionDoneEvent event) 两个属性都是空的。
我很确定调用被路由到同一个传奇(saga_entry 中唯一的记录在第二次方法调用后被删除)
你能帮我看看哪里出了问题吗?
我对 saga 没有特殊配置,使用 AxonServer 和 Spring boot
我找到了解决方案,问题出在关联属性。
正确的事件处理程序是
@EndSaga
@SagaEventHandler(associationProperty = "applicationId", keyName = "id")
public void on(ActionDoneEvent event) {
assert id != null;
}