我一直在关注AxonBank 示例,以了解 Axon 框架中 Saga 的实现,并有一些这样的代码来开始和结束 saga@Sagapublic class MoneyTransferSaga { @Inject private transient CommandGateway commandGateway; private String targetAccount; private String transferId; @StartSaga @SagaEventHandler(associationProperty = "transferId") public void on(MoneyTransferRequestedEvent event) { System.out.println("Inside start saga for money transfer event"); targetAccount = event.getTargetAccount(); transferId = event.getTransferId(); SagaLifecycle.associateWith("transactionId", transferId); System.out.println("## These are the params going into WMC : sourceAccount: " + event.getSourceAccount() + " transferID: " + transferId + " event.getAmount: " + event.getAmount()); commandGateway.send(new WithdrawMoneyCommand(event.getSourceAccount(), transferId, event.getAmount()), new CommandCallback<WithdrawMoneyCommand, Object>() { @Override public void onSuccess(CommandMessage<? extends WithdrawMoneyCommand> commandMessage, Object result) { } @Override public void onFailure(CommandMessage<? extends WithdrawMoneyCommand> commandMessage, Throwable cause) { System.out.println("On failure of withdraw money command inside saga "); System.out.println("###################### Cause of failure = " + cause); commandGateway.send(new CancelMoneyTransferCommand(event.getTransferId())); } }); } 在通过 REST API 执行汇款后,所有这些代码都会被执行,因为我可以看到我的日志被打印到控制台并且所有交易都存储在帐户表中。所有条目也存在于 domain_event_entry 中,但无论事务是成功还是失败,saga_entry 和 association_value_entry 表都保持为空。最初我认为这可能是因为 saga 商店配置错误,所以我配置了 saga 商店,MongoSagaStore但 Saga 的集合仍然是空的。那么我是在这里遗漏了什么还是 axon 只是在传奇完成后从这些表中删除了数据?
1 回答
鸿蒙传说
TA贡献1865条经验 获得超7个赞
当 Saga 条目结束时,AxonFramework 将自动从其存储中删除 Saga 条目,包括任何关联。所以你只会在那里看到活动实例的信息。
在示例应用程序中,所有总线组件都使用“Simple...”实现,这基本上意味着所有活动都在同一线程中执行。因此,一旦您收到 OK 或 NotOK,Saga 的所有活动也将结束。如果您要用异步或分布式实现替换它们,则情况不再如此。在整个过程完成之前,您将被返回。
添加回答
举报
0/150
提交
取消