当前位置: 首页 > 知识库问答 >
问题:

Axon框架:带有两个或三个微服务之间补偿事件的Saga项目

程化
2023-03-14
    null

我的问题是,有没有人用Axon做过类似的事情,有补偿,最好的做法是什么?如何重试Saga过程?用RetryScheduler?如果可以的话,添加一个github回购。

谢谢,Máté

共有1个答案

段干帅
2023-03-14

首先,让我回答你的主要问题:

我的问题是有人对轴突做过这样的事情吗?

很快,是的,因为这是for Sagas的主要用例之一。作为经验法则,我想说明一个传奇可以用来协调以下之间的复杂业务事务:

    null

为此,Axon有EventSchedulerDeadLineManager。请注意,两者中的前者发布一个事件供所有人查看。后者在单个Saga实例的上下文中调度deadlineMessage,从而限制了谁可以看到正在发生重试的范围。

通常,deadlineManager是我首选的操作模式,除非您要求每个人都能看到这个“重新调度操作”。仅供参考,请在此页面查看EventScheduler信息,并在此页面查看DeadlineManager信息。

下面是一些伪代码,可以让您了解Saga事件处理程序中的补偿操作是什么样子的:

class SomeSaga {

    private CommandGateway commandGateway;

    @SagaEventHandler(assocationValue = "some-key")
    public void on(SomeEvent event) {
        // perform some checks, validation and state setting, if necessary
        commandGateway.send(new MyActionCommand(...))
                      .exceptionally(throwable -> {
                                         commandGateway.send(new CompensatingAction(...));
                                     });
    }
}
 类似资料:
  • 对于我想要为Axon的几个服务实现Saga编排的用例,我构建了: 订单服务(带有Spring boot Axon框架的saga orchestrator) 支付服务(微服务) 运输服务(微服务) 然后我有一个用@Saga注释的类,有3个步骤/事件处理程序: 订单已创建(首次服务) 我的问题是,如果运输服务失败,我应该如何回滚/补偿所有以前执行的步骤? 从留档我有一些疑问: 我需要用@Saga创建一

  • 我们有一个侦听事件的微服务,现在让我们调用这个。它侦听RabbitMQ上的审计事件()。任何想要调用的人都需要创建并激发。我们在一个公共模块中共享了pojo,因此可以共享它。 注意,最后一部分需要是同步的,这意味着如果数据库保存失败,我们不想发送电子邮件或类似的东西。目前,这是通过从中的事件处理程序中调用commandGateway来完成的,从调用commandGateway是否正确,如果不正确,

  • 问题内容: 是否有一个跟踪用户某些事件的表。 总是有一个动作,之后可能会有一个动作。 现在,我想查询这两个动作之间的时间差,以获取用户和之间的time_diff 。 现在,您可以假定没有多个条目(例如,至少一个,最大另一个)。 我想要这样的结果: 问题答案: 您可以使用以下查询: 该子句过滤掉仅包含一个动作的组,例如OP中的with记录。 演示在这里

  • 这个问题与Axon Server/Framework的关系非常松散,因为我是在学习和尝试学习如何构建微服务时专门学习它的。由于在没有实际经验的情况下很难了解所有的架构模式(而且在没有一个大型应用程序来实际测试/构建的情况下,很难从实际经验开始),所以我在这里提出了很多理论(我的问题可能很愚蠢,对不起,我还在学习中)。 我下载了Axon Server,并成功地在三个独立的微服务中构建和运行了包含的g

  • 为了这个问题,我正在做一个项目,其中有两个微服务: null 根据我所读到的,为了进行这种更改,我们需要做以下几点: 从->切换 更改配置以启用分布式命令 使用SpringCloud或JCloud连接微服务 将AxonFramework添加到遗留InvoiceService项目并处理接收到的saga事件。 这是我们遇到麻烦的第四点:发票服务是由一个不愿意进行更改的单独团队维护的。 在这种情况下,使