Nservicebus CQR和种族:如何处理种族要求
虽然有人说商业世界中不存在种族歧视,我们需要寻找的是解决方案,但我不确定情况是否如此 我有一个容量和做活动票务的需要。当对活动的需求很高时,会有许多并发预订命令在同一微秒内发出。实现这一点的传统方法是使用锁定来防止竞争条件。否则,它最终会为无法获得的座位卖票,这是严格的商业禁忌 下表显示了同时发生的步骤顺序 时间|总容量|消耗|可用|客户1 |客户2 如果为没有座位的座位卖票是一个严格的商业禁忌,那么就这样做吧。该要求告诉您的是,销售/预订座位和可用座位数量应在同一笔交易中结束,并保持一致。您不能通过预订和启动活动来更改可用座位的数量,它必须是单笔交易。这样,当您试图减少表中的可用座位数时,您将收到乐观并发异常,因为在此期间有人对其进行了修改。然后,您可以再次尝试处理该事件,此时可用座位数已用完,因此您可以发布应用程序/预订拒绝事件并通知用户 是你应该看看的东西: 参考实施将是一个会议管理系统 您将能够轻松地在自己的环境中部署和运行 环境这将使您能够探索和实验 根据基于CQRS的方法构建的实际应用程序Nservicebus CQR和种族:如何处理种族要求,nservicebus,cqrs,axon,Nservicebus,Cqrs,Axon,虽然有人说商业世界中不存在种族歧视,我们需要寻找的是解决方案,但我不确定情况是否如此 我有一个容量和做活动票务的需要。当对活动的需求很高时,会有许多并发预订命令在同一微秒内发出。实现这一点的传统方法是使用锁定来防止竞争条件。否则,它最终会为无法获得的座位卖票,这是严格的商业禁忌 下表显示了同时发生的步骤顺序 时间|总容量|消耗|可用|客户1 |客户2 如果为没有座位的座位卖票是一个严格的商业禁忌,那么就这样做吧。该要求告诉您的是,销售/预订座位和可用座位数量应在同一笔交易中结束,并保持一致。您不
特别是看一下,这里有问题吗?base.updateservation。这是设置交易边界的地方吗?这些事务边界是使用服务器代码中的信号量还是db行级锁实现的?无论哪种方式,我们都需要锁,不是吗?您必须对数据库进行ACID事务处理,但不必锁定它,您可以利用-如果您试图将某些内容保存到数据库中,而该数据库在此期间已被修改,您将得到一个异常。
1 | 100 | 99 | 1 |seat available?| -
2 | | | | apply | seat available ?
3 | | | | event handle | apply
4 | | 100 | 0 | update state | event handle
5 | | 101 | -1 | | update state