- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个关于 Axon Saga 的问题。我有一个项目,我有三个微服务,每个微服务都有自己的数据库,但是两个“从属”微服务必须将他的数据共享给“主”微服务,为此我想使用 Axon Saga。我已经问过关于赔偿的问题,出了问题,我自己处理赔偿,可以,但不理想。目前我正在使用 DistributedCommandBus 在微服务之间进行通信,这样做有好处吗?我使用的是 Choreography Saga 模型,现在是这样的:
如果出现问题,则会向后提供补偿命令/事件。
我的问题是,有没有人对 Axon 做过这样的事情,并给予补偿,最佳做法是什么?如何重试 Saga 进程?使用 RetryScheduler?如果可以,请添加一个 github 存储库。
谢谢,马特
最佳答案
首先,让我回答您的主要问题:
My question is has anybody did something like this with Axon?
很快,是的,因为这是 Sagas 的主要用例之一。根据经验,我想说明 Saga 可用于协调复杂的业务事务:
从表面上看,您似乎已经选择了委托(delegate)复杂业务交易的选项二。
重要的是要注意,当您使用 Sagas 时,您应该非常有意识地处理任何异常和/或命令调度结果。
因此,如果您从“Master”向“Slave 1”发送命令,而后者操作失败,则此结果将返回到 Saga。因此,这为您提供了重试操作的第一个选项,我建议您使用补偿操作。最后,通过补偿操作,我说的是调度命令来触发它。
如果您不能依赖派发命令的直接响应,则在 Saga 中重试/重新安排消息将是一个合理的第二个选择。
为此,Axon 拥有 EventScheduler
和 DeadlineManager
。请注意,两者中的前者发布了一个事件供所有人查看。后者在单个 Saga 实例的上下文中安排一个 DeadlineMessage
,从而限制谁可以看到重试发生的范围。
通常情况下,DeadlineManager
将是我的首选操作模式,除非您要求每个人都看到此“重新安排操作”。仅供引用,检查 this EventScheduler
信息和 this 的页面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(...));
});
}
}
关于java - 轴突框架 : Saga project with compensation events between two or three microservices,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57919710/
我们计划开发一些基于 play 框架的微服务。他们将提供 rest api,其中很多将在幕后使用 akka cluster/cluster-sharding。 我们想要一个 api 网关来公开我们内部
我想知道是否可以使用NestJs ClientProxy从NestJs微服务向其他非NestJs微服务(例如:Spring Boot微服务)发出请求。我已经在谷歌上搜索了一段时间,但我还没有看到任何关
我很难找到答案。当我有两个Spring Boot微服务应用程序,微服务A和微服务B,并且它们都相互通信时,我遇到了一个问题。当微服务A在身份验证后生成JWT令牌并向微服务B发送响应时,微服务B如何验证
我很难找到答案。当我有两个Spring Boot微服务应用程序,微服务A和微服务B,并且它们都相互通信时,我遇到了一个问题。当微服务A在身份验证后生成JWT令牌并向微服务B发送响应时,微服务B如何验证
我们正在评估使用事件作为来源来构建报告,并增加了许多不同的选项。 我们目前正在服务结构集群中运行我们的系统(打算在未来某个时候迁移到 kubernetes),这意味着各种事件流的订阅者默认情况下将存在
是否可以通过微服务构建使用不同语言的项目?比如,我想搭建一个酒店管理系统,是否可以针对不同的模块同时使用asp.net core和nodejs。认为我想使用 nodejs 获取数据并使用 .net c
我将用 Twitter 说明我的问题。例如,Twitter 具有基于微服务的架构,这意味着不同的进程位于不同的服务器中并具有不同的数据库。 出现一条新推文,服务器 A 在其自己的数据库中存储了一些数据
我是微服务的新手,我遇到了异常。我只收到过几次,无法继续。 eureka_1 | 2019-02-25 15:08:22.666 ERROR 1 --- [target_eureka-7] c.n.e
微服务应该是可重用的吗?对于可重用,我并不是说共享特定领域的模型。 我的意思是,为一个应用程序创建的微服务是否应该在另一个应用程序中重用?如果它们可以在应用程序中重复使用就足够了吗? 解耦微服务的最佳
我将为我的数据仓库应用程序应用微服务。应用中有 4 个主要的微服务: 1)数据服务:将外部数据源导入/导出到DWH并从DWH查询数据。 2) 分析服务:用于 UI 上的图表可视化 3)机器学习:用于推
我有 2 个微服务 S1和 S2 . S1调用 S2更新数据然后 S1插入另一条数据,但让我们考虑 S1失败,那么我们需要回滚S2更新的数据否则我们将处于不一致的状态。 我也经历过 Saga 模式。它
我一直在阅读微服务架构但我仍然无法理解微服务间的通信机制。 在许多文章中,他们说微服务通常通过 RESTful API 公开。但是当您搜索互联网时,您总是会看到基于消息和事件的后端通信实现。 所以我很
让我们考虑一种情况,其中多个服务中继可以随时更改的数据,并且应该在每个微服务中大致同时更新 - 例如,有一个受支持的语言列表或一些可能有一天会更改并影响许多的公共(public)策略一次服务。 我能想
我听说过通用术语“上游服务”和“下游服务”这两个术语,但是我遇到了一些关于微服务架构的文章,他们在其中使用了这些术语,但是我无法获得上游和下游服务的含义在基于微服务的架构中会是什么?有人有一个简短的解
例如amazon.com;他们依赖于微服务架构,订单和付款可能是单独的微服务,但是当您在 amazon.com 上结帐订单时,您最终可以看到订单 ID 和详细信息。如果不是最终一致性方法,那是什么?也
让我们假设以下基于CQRS体系结构的简单UC: 电影说,我们有一个后端来管理业务对象。 此后端由2个微服务组成:CommandManager(创建/更新/删除影片)和QueryManager(查询影片
似乎在传统的微服务架构中,每个服务都有自己的数据库,对数据的理解不同(描述 here)。有时,数据库复制数据被认为是允许的。例如,“用户”服务可能基本上了解用户的所有信息,而“帖子”服务可能只存储主键
鉴于我有两个微服务:服务 A 和服务 B。 服务 A 拥有完整的客户数据,而服务 B 需要这些数据的一小部分(它通过一些批量加载从服务 A 获取)。 这两种服务都将客户存储在自己的数据库中。 如果然后
我正在开发一个带有微服务的应用程序,但我不知道如何分发微服务以允许身份验证。 我读过每个微服务都应该有自己的数据库以避免耦合。 问题是身份验证(通过 JWT)和用户微服务必须有权访问相同的数据库和表(
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 去年关闭。 Improve this questio
我是一名优秀的程序员,十分优秀!