小编pol*_*oft的帖子

Axon 框架 - 我如何回滚 Saga 进程

我正在使用 Axon 框架,而没有带有 spring-boot 自动配置的 Axon 服务器。我的问题是:如果我正在运行一个 saga 进程,如下所示,并且在处理过程中我的磁盘用完了,将会出现异常,我必须回滚。我怎样才能做到这一点?我必须回滚多少?

我的 saga_entry 表将是这样的:

SAGA_ID:22ad255b-4378-4bb4-84c2-061ca666c6e7修订:空,SAGA_TYPE:hu.saga.account.SagaAccount,SERIALIZED_SAGA:3c68752e6d6f6c617269732e736167612e6163636f756e742e536167614163636f756e742f3e

我的 association_value_entry 表将是这样的:

ID: 2, ASSOCIATION_KEY: accountId, ASSOCIATION_VALUE: 11, SAGA_ID: 22ad255b-4378-4bb4-84c2-061ca666c6e7, SAGA_TYPE: hu.saga.account.SagaAccount

在我的 domain_event_entry 表中将只有两个事件(而不是应该是 3 个) AccountCreatedEvent, MoneyWithdrawnEvent ,聚合 id: 11 。

这只是一个例子,主要问题可能是在 Axon Saga 中处理和实现回滚的最佳方法是什么?

@StartSaga
@SagaEventHandler(associationProperty = "accountId")
public void handle(AccountCreatedEvent event){
    logger.info("Saga Start");
    commandGateway.send(new WithdrawMoneyCommand(event.getAccountId(), event.getAccountId(),event.getOverDraftLimit()));
}
Run Code Online (Sandbox Code Playgroud)

我写 null 来模拟在 DepositMoneyCommand 构造函数中的潜在回滚

@SagaEventHandler(associationProperty = "accountId")
public void handle(MoneyWithdrawnEvent event){
    commandGateway.send(new DepositMoneyCommand(null,event.getTransactionId(),event.getAmount()));
}


@EndSaga
@SagaEventHandler(associationProperty = "accountId")
public void handle(MoneyDepositedEvent event){
    logger.info("Saga End"); …
Run Code Online (Sandbox Code Playgroud)

java saga axon spring-boot

3
推荐指数
1
解决办法
1819
查看次数

Intellij:更改 ctrl+space 弹出背景

我更新了我的 Intellij Idea,当 ctrl+space 建议栏出现时,它变成了非常恶心的颜色,我想将其改回蓝色。谁能帮我在哪里可以改变颜色?

java space popup intellij-idea ctrl

1
推荐指数
1
解决办法
648
查看次数

标签 统计

java ×2

axon ×1

ctrl ×1

intellij-idea ×1

popup ×1

saga ×1

space ×1

spring-boot ×1