当前位置:首页 > Web开发 > 正文

目前官网上的文档快速开始已经无法使用

2024-03-31 Web开发

CAP是一个用来解决微处事或者漫衍式系统中漫衍式事务问题的一个开源项目解决方案。可以解决跨处事器的数据一致性问题。一个简单的列子,如:订单系统创建订单后需要通知邮件通知用户下单告成,解决方案有下面几种:

1:创建订单时同步挪用邮件发送,邮件发送掉败则整个订单创建掉败,这样保证了一致性,但性能和可用性有非常大的问题。或者不管邮件发送状态,掉败了就算了,这样用户就可能收不到通知邮件了。

2:创建订单时通过动静行列队伍推送一个订单创建告成的事件,此外创建一个处事来监听消费此事件,并执行邮件发送的成果。这种方案存在往动静行列队伍推送数据掉败的可能,存在和方案1一样的问题。

3:创建订单时同时往一个叫“订单创建告成”的事件表中插入相关数据,两者在同一事务中。 此外创建一个处事按时盘问此表,发明有待措置惩罚惩罚的数据时,执行邮件发送,告成后把此数据删除或更新为已措置惩罚惩罚。此方案保证了最终一致性和可用性,但得按时扫描,性能和及时性有问题。

4:创建订单时同时往一个叫“订单创建告成”的事件表中插入相关数据,两者在同一事务中。并且通过动静行列队伍推送此动静,如果推送掉败,则按时扫描“订单创建告成”表将掉败的数据从头推送。此外创建一个处事来监听消费此事件,这种方案集成了方案1和方案2的长处,,即保证了最终一致性,也保证了可用性。

从上面来看最优的方案显示是方案4,我们此次的主角CAP也正是给与了此种方案来实现的,我们这里介绍的方案4还是对照简单的,CAP的实现要越发的严谨、越发强大,我们不需要建过程表,也不需要措置惩罚惩罚动静行列队伍的问题,底层很多的细节都不需要我们考虑,只管用就好了。CAP数据库存储撑持:Sql Server,MySql,PostgreSql,MongoDB。动静行列队伍撑持:RabbitMQ,Kafka,Azure Service Bus等。

各多CAP的介绍可以参考官网,详细的CAP理论可以参考其它文章。 官网  ,开源地点:https://github.com/dotnetcore/CAP  ,作者blog https://www.cnblogs.com/savorboard/

快速开始

CAP2.6是2019-8-29颁布的,目前官网上的文档快速开始已经无法使用,因为里面用了 Savorboard.CAP.InMemoryMessageQueue 组件,该组件还是2.51,不撑持最新的CAP2.6版本,应该得过段时间才会修复文档,或者等 Savorboard.CAP.InMemoryMessageQueue组件更新。此刻我们就在这开始我们的“快速开始”吧。我们将基于rabbitmq和sqlserver数据库来实现。

1:创建项目

打开VS创建一个名叫CapDemo的webapi项目,版本选择ASP.NET Core 2.2。CAP2.6不撑持2.2以下的.net core

技术图片

2:添加CAP引用

在Nuget中添加 DotNetCore.CAP   DotNetCore.CAP.RabbitMQ  DotNetCore.CAP.SqlServer 的引用。

技术图片

3:配置CAP

在Startup.cs的ConfigureServices要领中添加以下代码

services.AddCap(c => { c.UseSqlServer(@"Data Source=.\sql2014;Initial Catalog=Test;User ID=sa;Password=sa"); //使用SqlServer数据库,连接地点请依实际改削 c.UseRabbitMQ( mq => { mq.HostName = "192.168.150.134"; //RabitMq处事器地点,依实际情况改削此地点 mq.Port = 5672; mq.UserName = "admin"; //RabbitMq账号 mq.Password = "admin"; //RabbitMq暗码 }); });

技术图片

4:颁布事件

将 CapDemo.Controllers.ValuesController中的所有要领全部删除。添加引用 using DotNetCore.CAP; ,并添加以下要领

[HttpGet] public async Task<string> Get([FromServices]ICapPublisher capPublish) { await capPublish.PublishAsync<string>("Order.Created", "hello,订单创建告成啦"); //颁布Order.Created事件 return "订单创建告成啦"; }

5:订阅事件

在CapDemo.Controllers.ValuesController中添加以下要领:

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32169.html