CAP带你轻松玩转ASP.NETCore消息队列
CAP是什么?
CAP是由我们园子里的杨晓东大神开发出来的一套分布式事务的决绝方案,是.Net Core Community中的第一个千星项目(目前已经1656 Start),具有轻量级、易使用、高性能等特点。
https://github.com/dotnetcore/CAP
本博客主要针对易用性这一点,展开叙述,一起看看CAP如何结合EF Core和RabbitMQ带领小白轻松走入分布式消息队列的世界。
准备
首先,你需要搭建一套RabbitMQ系统,搭建过程在此不再叙述,如果大家觉得麻烦,可以用我搭好的。
HostName: coderayu.cn UserName:guest Password:guest (仅仅可用作实验,数据丢失不负责)
创建Asp.Net Core 项目,并引入Nuget包
你可以运行以下下命令在你的项目中安装 CAP。
PM> Install-Package DotNetCore.CAP
如果你的消息队列使用的是 Kafka 的话,你可以:
PM> Install-Package DotNetCore.CAP.Kafka
如果你的消息队列使用的是 RabbitMQ 的话,你可以:
PM> Install-Package DotNetCore.CAP.RabbitMQ
CAP 提供了 Sql Server, MySql, PostgreSQL 的扩展作为数据库存储:
// 按需选择安装你正在使用的数据库PM> Install-Package DotNetCore.CAP.SqlServer PM> Install-Package DotNetCore.CAP.MySql PM> Install-Package DotNetCore.CAP.PostgreSql
创建DbContext
因为我采用的是EF Core,所以首先要创建一个DbContext上下文,代码如下:
Startup配置
首先需要在ConfigureServices函数中进行相关服务的注入,对应的操作和功能解释如下:
最后还要再Congiure中启用CAP中间件
利用EF Core生成CAP数据库
再程序包管理控制台中依此输入以下命令行
PM> Add-Migration Init
PM> update-database
如果成成功执行,那么打开数据库,就可以看到用来存储CAP发送和接收数据的表格了。
表格中每列的含义如下:
消息的发送和订阅
我们直接在ValuesController的基础上进行改造。
在 Controller 中注入 ICapPublisher
然后使用 ICapPublisher
进行消息发送
发送消息
订阅消息
Run
启动程序后,首先看到CAP启动成功
紧随其后,消费者也就是我们的订阅方法在RabbitMQ服务器上注册成功。
发送消息,发送成功,如下
发送后,立即在控制台看到了订阅方法输出的结果。
消息的失败重试
在订阅方法中,如果抛出异常,那么CAP就会认为该条消息处理失败,会自动进行重试,重试次数在前方已经进行了配置。
我们把订阅方法做一个改动,打印接收的信息到控制台中,并抛出异常
可以看到,立即进行了三次重试
可是在前面,我们设置的失败重试次数是5次,为什么这里只重试三次吗?是不是要叫晓东过来改BUG了呢?当然不是。
观察发现,CAP重试的前三次是立即进行的,而后面的重试,是每隔一段时间进行的,当在分布式通讯的过程中,可能出现了问题确实不会立即修复解决,可能过了一定时间,系统就自动恢复了,如网络抖动。
CAP仪表盘
发送成功了五条消息,成功接收处理了三条,两条处理失败,处理失败的任务,我们可以直接在面板中进行重新消费,可谓非常方便。
同时,处理失败的消息,点击消息的编号后,可以查看到消息的内容和异常原因。
CAP如此强大,让消息队列这种高大上产品操作So Easy,学会了CAP,也可以吹牛说,我也懂分布式任务处理啦。
感谢晓东开发出如此强大的项目,同时感谢.Net Core Community。
参考 CAP Github wiki
https://github.com/dotnetcore/CAP/wiki
本博客Demo代码
https://github.com/liuzhenyulive/CAP.Demo
相关文章:
分布式事务一致性解决方案
.NetCore Cap 结合 RabbitMQ 实现消息订阅
.NET Core微服务之开源项目CAP的初步使用
分布式事务,EventBus 解决方案:CAP【中文文档】
CAP 介绍及使用【视频】
.NET Core 事件总线,分布式事务解决方案:CAP
原文地址: https://www.cnblogs.com/CoderAyu/p/9527012.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
CAP带你轻松玩转ASP.NETCore消息队列相关推荐
- 带你们轻松玩遍吃遍张家界
来张家界的朋友一般都会去的景点是国家森林公园.天门山.玻璃桥.凤凰等等,玩遍这些景点至少需要4天-5天的时间.很多朋友虽然想一次性玩遍张家界的各大景点,但是由于时间.距离关系,只能选取几个最想去的地方 ...
- 【EasyNLP】带你轻松玩转CLUE榜单
重磅来袭!EasyNLP正式成为CLUE榜单的官方工具! 1.导读 EasyNLP是一款简单.易用.高效的NLP开发工具,其完全基于Pytorch实现,提供了包括预训练语言模型(Pre-trained ...
- Kubernetes Pod篇:带你轻松玩转Pod
本文将对Kubernetes如何发布与管理容器应用进行详细说明,主要包括Pod概述.基本用法.生命周期.Pod的控制和调度管理.Pod的升级和回滚,以及Pod的扩容机制等内容,并结合具体详细的示例,带 ...
- 带你轻松玩转统计图~
在做统计资料整理与分析时,我们经常会遇到做统计图.在数据量不大的时候,通常使用Excel或者其他普通图表,但是一遇到数据庞大的情况,就容易杂乱无章.那么使用什么工具能带你轻松玩转统计图呢?当然是Fin ...
- 无需TCL编程能力,STKO带你轻松玩转OpenSEES
笔者:心尘轩/Angus 划重点:通过本文,你会了解OpenSEES(以下简称OS)基于tcl 和C++混合编程的实质,会洞悉一个有限元软件的三大主要部分,会明白现在OS的不足.并在对一个有限元软件宏 ...
- 最新最全的视觉Transformer教程!论文分析 + 逐行Coding,带你轻松玩转ViT
Transformer自2017年被提出后,从横扫NLP领域的风光无二,到陷入一片对其在CV任务有效性的质疑声中,再到不久前在多项图像任务中显示出直逼CNN的优异性能 以及 ICCV2021 best ...
- TPYBoard开发板带你轻松玩转MicroPython
2019独角兽企业重金招聘Python工程师标准>>> 说到MicroPython,也许有人会感到陌生.而说到和它密切相关的Python,是否会恍然大悟呢?Python属于解释型语言 ...
- 带你轻松玩转神奇Micro:bit开发板的Max:Bot机器人!
MaxBot Max:Bot机器人是一款低门槛,功能丰富的移动平台,设计感的接口,可以完美的与micro:bit搭配使用.集成了机器人的基础功能,具有易组装.一体成型的全金属闪亮外壳. micro:b ...
- 剪裁tiff影像数据_能看更会用,超擎影像云平台带你轻松玩转海量影像!
北斗系统.高分专项.无人机航拍--在行业数字化转型的今天,影像作为大数据的一种,以其大范围动态实时监测等特点备受青睐.越来越快的更新频率,爆炸式的数量增长,也带来了入库慢.处理时间长.系统整合不畅等难 ...
最新文章
- C++语言基础(11)-多态
- PHP二分法查找,MYSQL索引即为用了此查找
- 2021年信息系统项目管理师考试大纲
- oracle 触发器 和 常用内置程序包
- Python实训day06am【网络爬虫(爬取接口)】
- 番茄花园 Win10 系统 64位 全新纯净版 v2021.01
- pyqt5 qscrollarea到达_pyqt5 QScrollArea设置在自定义侧(任何位置)
- 测试如何学python_学习Python:如何测试函数和类,快学,与
- 原创力文档c语言程序设计第五章,C语言程序设计教程第五章练习题题目(7页)-原创力文档...
- 作业8 单元测试练习
- 【TWVRP】基于matlab节约算法求解带时间窗的电动车路径规划问题【含Matlab源码 1169期】
- [转]电子书收集工具
- 实战篇:Oracle分区表之在线重定义
- 【保姆级入门系列】阿ken教你学 Python(五) ——函数
- 2022机器学习好网站大收藏
- csgo红锁号能解锁吗_CSGO红锁黑刀号!重磅!大规模红锁!
- 拉依达准则的一个c++实现
- 如何能快速看懂一个Java项目?
- springboot找不到对象(自动注入失败)
- nodejs和js之间有什么区别?
热门文章
- mysql经典的8小时问题-wait_timeout
- 中航工业集团金网络(北京)电子商务有限公司副总经理刘正珩:航空“智”造的供应链支撑平台...
- html5 弹性布局
- 898A. Rounding#数的舍入
- java遇见的问题分析
- JsonRequestBehavior.AllowGet 方便浏览器调试
- activemq安全设置 设置admin的用户名和密码
- 生成二维码的 jQuery 插件:jquery.qrcode.js
- C# WPF MVVM模式Prism框架下事件发布与订阅
- RabbitMQ 处理过慢,原来是一个 SQL 缓存框架导致的 GC 频繁触发