前言

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(分布式事务最终一致性)框架相关推荐

  1. 一致 先验分布 后验分布_「分布式技术」分布式事务最终一致性解决方案,下篇...

    各位志同道合的朋友们大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题 上 ...

  2. 分布式事务最终一致性-CAP框架轻松搞定

    前言 对于分布式事务,常用的解决方案根据一致性的程度可以进行如下划分: 强一致性(2PC.3PC):数据库层面的实现,通过锁定资源,牺牲可用性,保证数据的强一致性,效率相对比较低. 弱一致性(TCC) ...

  3. DotNetCore.Cap分布式事务实现最终一致性

    项目演化过程中,微服务已经遍地开花.一个大项目下几十上百个微服务已经是常态.但衍生出另外一个问题就是跨微服务事务,跨库事务的分布式事务.市面了解过的有2CP.3CP.TCC等等分布式事务解决方案,各有 ...

  4. 分布式事务最终一致性常用方案

    目前的应用系统,不管是企业级应用还是互联网应用,最终数据的一致性是每个应用系统都要面临的问题,随着分布式的逐渐普及,数据一致性更加艰难,但是也很难有银弹的解决方案,也并不是引入特定的中间件或者特定的开 ...

  5. 分布式事务最终一致性mysql_分布式事务最终一致性方案案例

    前言: 以下以网上课程购买流程举一个例子: 如何实现两个分布式服务(订单服务.学习服务)共同完成一件事即订单支付成功自动添加学生选课的需求, 这里的关键是如何保证两个分布式服务的事务的一致性. 订单支 ...

  6. 阿里 P8 聊分布式事务最终一致性的 6 种解决方案

    分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,尤其在微服务架构中,几乎可以说是无法避免,因此也常常被认为是微服务落地的最大阻碍. 随着系统的服务拓扑从单体应用迈 ...

  7. java分布式事务——最终一致性,最大努力通知总结!

    目录 源码地址:https://github.com/kaixuanzhang123/dtx.git 4.分布式事务解决方案之可靠消息最终一致性 4.1.什么是可靠消息最终一致性事务 4.2.解决方案 ...

  8. 6种分布式事务最终一致性解决方案,一次性说清了!

    分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,尤其在微服务架构中,几乎可以说是无法避免,因此也常常被认为是微服务落地的最大阻碍. 随着系统的服务拓扑从单体应用迈 ...

  9. RabbitMQ消息可靠性投递及分布式事务最终一致性实现

    RabbitMQ消息可靠性投递就是保证消息生产者能够将消息百分百投递到RabbitMQ服务器,并在传递过程中不丢失.然而在生产环境中由于网络中断.网络不稳定等原因导致消息在投递过程中丢失,这或许会造成 ...

最新文章

  1. linux系统创建lvm卷,LVM逻辑卷创建管理
  2. python 字符串去重从小到大排列_python 序列(字符串、字符串、元组、集合、字典)...
  3. ndnarry元素处理
  4. win8.1远程连接Redis数据库
  5. java三态_Java中对象的三种状态
  6. 什么是TensorBoard?
  7. 习题3.3--C语言程序设计第三版课后习题(苏小红)
  8. toshiba 共享文件夹_东芝打印机如何共享
  9. 【css】css实现斜线表头
  10. 提示文件损坏无法删除时如何删除文件
  11. 总算编译通过了《自制编程语言》一书里的代码!
  12. 网络安全:六种常见的网络攻击手段
  13. 《人本界面》读书笔记
  14. js实现盒子水平垂直居中
  15. 作为程序员的你 是喜欢代码还是喜欢工作 ?
  16. MFC单项选择题标准化考试系统
  17. 解决某些软件检测不到java环境问题
  18. week 11 67
  19. php随机图片github,GitHub - galnetwen/Random-Image: 随机图片服务
  20. r7 4700u核显相当于什么显卡

热门文章

  1. Cocos Creater 敏捷开发之插件开发
  2. spark(kryo)、hadoop(writable)、jdk(serializable)-序列化
  3. 联想7y50服务器预装系统了吗,联想y50重装系统教程
  4. Excel——数组入门
  5. 【踩坑笔记】从零开始在Linux和Windows部署安装 ***
  6. SAP中WM仓库管理中关于仓储单位SU的应用理解
  7. Linux ora-12514多实例,ORA-12514问题解决
  8. ECG分析:基于深度学习的ECG心律失常分类入门(4)
  9. 人工智能--CV视觉方向详细知识体系总结(2021新)
  10. 计算机维修七方法,常见的CPU故障及维护方法