Jimmy Boagard描述了麦当劳快餐连锁店,将其与分散聚集模式进行比较 .
初步实施思路:
为所有食品站所能获得的所有类型的FoodOrdered事件建立一个共同界面,然后每个食品站将能够消费/创建其各自的项目并发布共同的完成事件.例如:薯条和汉堡站收到关于薯条顺序的消息,薯条站消耗该命令宣布该传奇正在监听的ItemDoneEvent.
最初的担忧:
由于佐贺不关心食品的完成只是一个事实,即所有的食物都完成了类型这似乎是一个确定的解决方案.然而后阅读警告这里关于队列的共享和注意到,Consumer.Conditional过滤已与MassTransit 3.0去除感觉好像框架说:"坏事(TM)会发生"这种类型的方法.但是我不知道如果不为厨房中的每个食品项目创建消息请求和响应并关联事件,您还能做到这一点.例如:FriesOrdered,BurgerOrdered FriesCooked,BurgerCooked.如果您必须为厨房中的每件物品做这件事,这将非常繁琐?
鉴于上述问题 - 这种类型的工作流程的一个好的传奇示例是什么样的?
我正在开发我对分布式系统的洞察力,以及如何在这些系统中保持数据一致性,其中业务事务涵盖多个服务,有限的上下文和网络边界.
以下是我知道用于实现分布式事务的两种方法:
2PC是应用程序通过平台的支持透明地利用全局ACID事务的协议.作为平台的嵌入,据我所知,它对业务逻辑和应用程序代码是透明的.
另一方面,Sagas是一系列本地事务,其中每个本地事务变异并持久化实体以及指示全局事务的阶段并提交更改的一些标志.换句话说,事务的状态是域模型的一部分.回滚是进行一系列"倒置"交易的问题.在两种情况下,服务发出的事件都会触发这些本地事务.
现在,何时以及为什么人们会使用传真而不是2PC,反之亦然?两者的用例和优点/缺点是什么?特别是,传奇的脆弱让我感到紧张,因为倒置的分布式交易也可能失败.
我正在尝试理解传奇,同时我有一种特定的思考方式 - 但我不确定我的想法是否正确.因此,我想详细说明并让别人告诉我这是对还是错.
根据我的理解,传奇是解决长期运行流程建模问题的解决方案.长时间运行意味着:涉及多个命令,多个事件以及可能的多个聚合.该进程未在其中一个参与聚合内建模,以避免它们之间的依赖关系.
基本上,saga只不过是一个命令/事件处理程序,它对内部和外部命令/事件作出反应.它不包含其自身的逻辑,它只是一个(有限)状态机,并为此提供的任务,例如当事件发生X,发送命令ÿ.
Sagas持久存储到事件存储以及聚合,与特定的聚合实例相关联,因此在使用此特定聚合(或聚合集合)时会重新加载.
这是正确的吗?
我正在研究事件基础架构,并了解了两种架构事件溯源和事件驱动架构。
我的理解如下
事件驱动 :
事件溯源:
但我不明白的是,为什么在事件源中重播事件会导出整个事务,但在事件驱动中是不可能的。
如果有人用现实生活中的例子来描述它将会很有帮助。
这几天在研究微服务服务间通信模式。所以在我的研究过程中,我发现有两种模式,分别称为 SAGA 和事件溯源。但我无法在互联网上找到资源来了解这两种模式之间的区别。我的意思是我知道事件溯源将借助事件存储来捕获事件的历史记录。因此,根据我的理解,我觉得事件溯源就像是基于编排的 SAGA 模式的扩展版本。所以我需要澄清我的论点是否可以接受。我将在下面附上我在互联网上找到的两种模式的示例图。请在任何解释过程中使用这些图表。
我有一个关于本机的应用程序.调试模式适用于ios.但发布模式不起作用.我尝试更改优化级别但没有帮助.我没有看到任何错误的问题.只是没有工作一些功能.我无法调试应用程序的发布版本.如何解决这个问题呢?
作为最后一个改变我们添加了以下saga,当我们删除调用这个传奇它工作
import { select, take, takeLatest, call, put, fork, race } from 'redux-saga/effects';
import R from 'ramda';
import V from 'o-validator';
import * as actionCreators from './actions';
import { redirectTo, showModalError, showModal, showOtp, closeOtp, errorOtp, loader, keychainSet } from '../../../actions/app-actions';
import { storeSession, refreshSession } from '../../../actions/session-actions';
import I18n from 'react-native-i18n';
import {
KEYCHAIN_RESET,
KEYCHAIN_GET,
KEYCHAIN_RESULT
} from '../../../constants/action-types';
import { validatePassword, createCustomError, serverError } from '../../../services/utils';
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms)) …Run Code Online (Sandbox Code Playgroud) 我想澄清组织架构的最佳方式是什么。
我有休息 api 和微服务架构。我已经应用了每个服务模式的数据库。
所以让我们想象一下用户想要创建一个订单(一个电子商务系统)。但是用户可以有信用额度。所以流程如下:
OrderService 创建一个挂单。然后推送一个关于它的事件。
UserService 处理该事件并发布超出信用额度事件或信用保留事件。
OrderService 接收事件并将订单的状态更改为已批准或已取消。
一切看起来都不错。但问题是用户在这个简单的流程中会做什么?我的意思是:用户发出 POST 请求 /orders 和 ...
不幸的是,上面的任何选项都有其优点和缺点。
挑战在于我描述了最简单的情况。实际上,可能涉及数十个服务(甚至第三方)。当然,我期待高负载。所以队列可能被填满。
请提出解决方案进行讨论。我非常感谢答案以及指向生产就绪系统文档的链接。
在redux-saga,我正在使用yield delay(1000);.在我的单元测试中,我做到了expect(generator.next().value).toEqual(delay(1000));.
我希望测试通过.
这是我的sagas.js:
import { delay } from 'redux-saga';
export function* incrementAsync() {
yield delay(1000);
}
Run Code Online (Sandbox Code Playgroud)
这是我的 sagas.test.js
import { delay } from 'redux-saga';
import { incrementAsync } from '../sagas';
describe('incrementAsync Saga test', () => {
it('should incrementAsync', () => {
const generator = incrementAsync();
expect(generator.next().value).toEqual(delay(1000));
});
});
Run Code Online (Sandbox Code Playgroud)
●incrementAsync Saga test>应该incrementAsync
expect(received).toEqual(expected)
Expected value to equal:
{"@@redux-saga/CANCEL_PROMISE": [Function anonymous]}
Received:
{"@@redux-saga/CANCEL_PROMISE": [Function anonymous]}
Difference:
Compared values have no visual difference. …Run Code Online (Sandbox Code Playgroud) 我想在我的Spring Boot微服务中使用SAGA模式.例如,按客户的顺序,当订单创建时,生成的事件OrderCreatedEvent,然后在客户微服务中,监听器上OrderCreatedEvent更新客户信用并生成CreditUpdateEvent和....
我使用会话事务JmsTemplate来生成事件.在javadoc中JmsTemplate 说JMS事务在主事务之后提交:
这具有本地JMS事务与主事务(可能是本机JDBC事务)一起管理的效果,JMS事务在主事务之后立即提交.
现在我的问题是如何处理以下场景:
提交的主事务(例如,订单已提交已提交)和系统无法提交JMS事务(出于任何原因).
我想使用SAGA而不是两阶段提交,但我认为只是SAGA将问题从订单和客户服务转移到订单服务和JMS提供商.
saga ×10
apache-kafka ×2
cqrs ×2
event-driven ×2
events ×2
reactjs ×2
aggregate ×1
architecture ×1
c# ×1
cloud ×1
ios ×1
java ×1
jms ×1
masstransit ×1
react-native ×1
react-redux ×1
redis ×1
redux ×1
redux-saga ×1
rest ×1
spring-boot ×1
transactions ×1