用c 做网站和数据库方法,融媒体网络营销是什么,免费推广平台排行榜,服装模板网站CAP介绍#xff1a;CAP是一个用来解决微服务或者分布式系统中分布式事务问题的一个开源项目解决方案。可以解决跨服务器的数据一致性问题。一个简单的列子#xff0c;如#xff1a;订单系统创建订单后需要通知邮件通知用户下单成功#xff0c;解决方案有下面几种#xff1… CAP介绍CAP是一个用来解决微服务或者分布式系统中分布式事务问题的一个开源项目解决方案。可以解决跨服务器的数据一致性问题。一个简单的列子如订单系统创建订单后需要通知邮件通知用户下单成功解决方案有下面几种 1创建订单时同步调用邮件发送邮件发送失败则整个订单创建失败这样保证了一致性但性能和可用性有非常大的问题。或者不管邮件发送状态失败了就算了这样用户就可能收不到通知邮件了。 2创建订单时通过消息队列推送一个订单创建成功的事件另外创建一个服务来监听消费此事件并执行邮件发送的功能。这种方案存在往消息队列推送数据失败的可能存在和方案1一样的问题。 3创建订单时同时往一个叫“订单创建成功”的事件表中插入相关数据两者在同一事务中。另外创建一个服务定时查询此表发现有待处理的数据时执行邮件发送成功后把此数据删除或更新为已处理。此方案保证了最终一致性和可用性但得定时扫描性能和及时性有问题。 4创建订单时同时往一个叫“订单创建成功”的事件表中插入相关数据两者在同一事务中。并且通过消息队列推送此消息如果推送失败则定时扫描“订单创建成功”表将失败的数据重新推送。另外创建一个服务来监听消费此事件这种方案集成了方案1和方案2的优点即保证了最终一致性也保证了可用性。从上面来看最优的方案显示是方案4我们这次的主角CAP也正是采用了此种方案来实现的我们这里介绍的方案4还是比较简单的CAP的实现要更加的严谨、更加强大我们不需要建过程表也不需要处理消息队列的问题底层很多的细节都不需要我们考虑只管用就好了。CAP数据库存储支持Sql ServerMySqlPostgreSqlMongoDB。消息队列支持RabbitMQKafkaAzure Service Bus等。各多CAP的介绍可以参考官网详细的CAP理论可以参考其它文章。 官网 http://cap.dotnetcore.xyz/ 开源地址https://github.com/dotnetcore/CAP ,作者blog https://www.cnblogs.com/savorboard/快速开始CAP2.6是2019-8-29发布的《CAP 2.6 版本发布通告》目前官网上的文档快速开始已经无法使用因为里面用了 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 core2添加CAP引用在Nuget中添加 DotNetCore.CAP DotNetCore.CAP.RabbitMQ DotNetCore.CAP.SqlServer 的引用。3:配置CAP在Startup.cs的ConfigureServices方法中添加以下代码 services.AddCap(c { c.UseSqlServer(Data Source.\sql2014;Initial CatalogTest;User IDsa;Passwordsa); //使用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 Taskstring Get([FromServices]ICapPublisher capPublish) {await capPublish.PublishAsyncstring(Order.Created, hello订单创建成功啦); //发布Order.Created事件return 订单创建成功啦; }5订阅事件在CapDemo.Controllers.ValuesController中添加以下方法 [NonAction] [CapSubscribe(Order.Created)] //监听Order.Created事件public async Task OrderCreatedEventHand(string msg) { Console.WriteLine(msg); }6最后一步启动测试在OrderCreatedEventHand方法内打个断点F5启动项目访问https://localhost:44304/api/values界面。因为此例中第一次访问时可能发布事件比订阅事件要快导致还没订阅就把事件发布出去了这样的事件会丢失所以我们再F5刷新一下界面可以看到程序就进入到了订阅事件里面。后记添加监控仪表盘监控CAP运行状况1只需要在Startup.cs的AddCap方法中添加配置 c.UseDashboard(); 就万事大吉了一个功能强大的事件管理界面就出来了具体如下图2重新编译并启动项目进入https://localhost:44304/cap 从打开的界面里可以看到CAP的各种事件和状态。数据库变化我们再看看数据库里面的变化吧从下图可以看出CAP自动创建了两个表并且记录了发布的消息和接收到的消息。这些数据会定时删除。这些都是不需要我们管的。本示例源码下载https://pan.baidu.com/s/1fHXSW20JHSoaYPH748VRKg原文链接https://www.cnblogs.com/sunyuliang/p/11434985.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com