DotNetCore CAP(分布式事务最终一致性)框架
前言
CAP用来处理分布式事务以及提供EventBus
的功能,具有轻量级,高性能,易使用等特点。
安装包
Install-package DotNetCore.CAP
Install-package DotNetCore.CAP.RabbitMQ
Install-package DotNetCore.CAP.SqlServer
使用方法
配置
Startup
->ConfigureServices
中添加服务:
//add CAP
services.AddCap(x =>
{ x.UseEntityFramework<OrderContext>(); // 使用EF x.UseSqlServer(connecttext); // 使用SQL Server x.UseRabbitMQ(cfg => { cfg.HostName = "127.0.0.1"; cfg.Port = 5672; cfg.UserName = "test1"; cfg.Password = "test1"; }); // 使用RabbitMQ x.UseDashboard(); // Dashboard // Below settings is just for demo x.FailedRetryCount = 2; x.FailedRetryInterval = 5;
});
案例
模仿订单系统下单成功后,推送后续消息到各个子系统,保证分布式系统间通信的一致性。
代码
订单系统的消息发布者:
public interface IOrderRepository
{ bool CreateOrder(Order order);
} public class OrderRepository : IOrderRepository
{ public readonly OrderContext _context; //ef 订单上下文 public readonly ICapPublisher _capPublisher;//cap 消息发布者 public OrderRepository(OrderContext context, ICapPublisher capPublisher) { this._context = context; this._capPublisher = capPublisher; } public bool CreateOrder(Order order) { using (var trans = _context.Database.BeginTransaction()) { var orderEntity = new Order() { OrderTime = order.OrderTime }; _context.Orders.Add(orderEntity); _context.SaveChanges(); _capPublisher.Publish("czhsoft.services.order.create", orderEntity); trans.Commit(); } return true; }
}
其它子系统的消息订阅者:
public interface IOrderSubscriberService
{ void ConsumeOrderMessage(Order message);
} public class OrderSubscriberService : IOrderSubscriberService, ICapSubscribe
{ public OrderSubscriberService() { } [CapSubscribe("czhsoft.services.order.create")] public void ConsumeOrderMessage(Order message) { Console.Out.WriteLine($"[MsgApi] Received message : order id {message.OrderId}"); }
}
DotNetCore CAP(分布式事务最终一致性)框架相关推荐
- 一致 先验分布 后验分布_「分布式技术」分布式事务最终一致性解决方案,下篇...
各位志同道合的朋友们大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题 上 ...
- 分布式事务最终一致性-CAP框架轻松搞定
前言 对于分布式事务,常用的解决方案根据一致性的程度可以进行如下划分: 强一致性(2PC.3PC):数据库层面的实现,通过锁定资源,牺牲可用性,保证数据的强一致性,效率相对比较低. 弱一致性(TCC) ...
- DotNetCore.Cap分布式事务实现最终一致性
项目演化过程中,微服务已经遍地开花.一个大项目下几十上百个微服务已经是常态.但衍生出另外一个问题就是跨微服务事务,跨库事务的分布式事务.市面了解过的有2CP.3CP.TCC等等分布式事务解决方案,各有 ...
- 分布式事务最终一致性常用方案
目前的应用系统,不管是企业级应用还是互联网应用,最终数据的一致性是每个应用系统都要面临的问题,随着分布式的逐渐普及,数据一致性更加艰难,但是也很难有银弹的解决方案,也并不是引入特定的中间件或者特定的开 ...
- 分布式事务最终一致性mysql_分布式事务最终一致性方案案例
前言: 以下以网上课程购买流程举一个例子: 如何实现两个分布式服务(订单服务.学习服务)共同完成一件事即订单支付成功自动添加学生选课的需求, 这里的关键是如何保证两个分布式服务的事务的一致性. 订单支 ...
- 阿里 P8 聊分布式事务最终一致性的 6 种解决方案
分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,尤其在微服务架构中,几乎可以说是无法避免,因此也常常被认为是微服务落地的最大阻碍. 随着系统的服务拓扑从单体应用迈 ...
- java分布式事务——最终一致性,最大努力通知总结!
目录 源码地址:https://github.com/kaixuanzhang123/dtx.git 4.分布式事务解决方案之可靠消息最终一致性 4.1.什么是可靠消息最终一致性事务 4.2.解决方案 ...
- 6种分布式事务最终一致性解决方案,一次性说清了!
分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,尤其在微服务架构中,几乎可以说是无法避免,因此也常常被认为是微服务落地的最大阻碍. 随着系统的服务拓扑从单体应用迈 ...
- RabbitMQ消息可靠性投递及分布式事务最终一致性实现
RabbitMQ消息可靠性投递就是保证消息生产者能够将消息百分百投递到RabbitMQ服务器,并在传递过程中不丢失.然而在生产环境中由于网络中断.网络不稳定等原因导致消息在投递过程中丢失,这或许会造成 ...
最新文章
- linux系统创建lvm卷,LVM逻辑卷创建管理
- python 字符串去重从小到大排列_python 序列(字符串、字符串、元组、集合、字典)...
- ndnarry元素处理
- win8.1远程连接Redis数据库
- java三态_Java中对象的三种状态
- 什么是TensorBoard?
- 习题3.3--C语言程序设计第三版课后习题(苏小红)
- toshiba 共享文件夹_东芝打印机如何共享
- 【css】css实现斜线表头
- 提示文件损坏无法删除时如何删除文件
- 总算编译通过了《自制编程语言》一书里的代码!
- 网络安全:六种常见的网络攻击手段
- 《人本界面》读书笔记
- js实现盒子水平垂直居中
- 作为程序员的你 是喜欢代码还是喜欢工作 ?
- MFC单项选择题标准化考试系统
- 解决某些软件检测不到java环境问题
- week 11 67
- php随机图片github,GitHub - galnetwen/Random-Image: 随机图片服务
- r7 4700u核显相当于什么显卡
热门文章
- Cocos Creater 敏捷开发之插件开发
- spark(kryo)、hadoop(writable)、jdk(serializable)-序列化
- 联想7y50服务器预装系统了吗,联想y50重装系统教程
- Excel——数组入门
- 【踩坑笔记】从零开始在Linux和Windows部署安装 ***
- SAP中WM仓库管理中关于仓储单位SU的应用理解
- Linux ora-12514多实例,ORA-12514问题解决
- ECG分析:基于深度学习的ECG心律失常分类入门(4)
- 人工智能--CV视觉方向详细知识体系总结(2021新)
- 计算机维修七方法,常见的CPU故障及维护方法