• CAP带你轻松玩转ASP.NETCore消息队列


    CAP带你轻松玩转ASP.NETCore消息队列

    <div class="rich_media_content" id="js_content">
                    
    
                    
    
                    
                    
                    <h1 style="font-size:20px;font-weight:bold;line-height:25px;background:rgb(22,159,230);color:rgb(235,235,235);font-family:'微软雅黑', '宋体', '黑体', Arial;"><a name="t0"></a>CAP是什么?</h1><p style="font-family:'微软雅黑', PTSans, Arial, sans-serif;font-size:15px;background-color:rgb(255,255,255);">CAP是由我们园子里的杨晓东大神开发出来的一套分布式事务的决绝方案,是.Net Core Community中的第一个千星项目(目前已经1656 Start),具有轻量级、易使用、高性能等特点。</p><p style="font-family:'微软雅黑', PTSans, Arial, sans-serif;font-size:15px;background-color:rgb(255,255,255);"><br></p><p style="font-family:'微软雅黑', PTSans, Arial, sans-serif;font-size:15px;background-color:rgb(255,255,255);"><img src="https://ss.csdn.net/p?https://mmbiz.qpic.cn/mmbiz_png/gak2lhVxV6KhZcRwzUqU9ZsVcunZHOKtficKB2JkklXq3IbHg3dwQIq6e52X74Wq4nicwqmxdIbToyge7EMTIr6A/640?wx_fmt=png" alt="640?wx_fmt=png">https://github.com/dotnetcore/CAP</p><p style="font-family:'微软雅黑', PTSans, Arial, sans-serif;font-size:15px;background-color:rgb(255,255,255);">本博客主要针对易用性这一点,展开叙述,一起看看CAP如何结合EF Core和RabbitMQ带领小白轻松走入分布式消息队列的世界。<img class="wlEmoticon wlEmoticon-ninja" style="border-style:none;" src="https://ss.csdn.net/p?https://mmbiz.qpic.cn/mmbiz_png/gak2lhVxV6KhZcRwzUqU9ZsVcunZHOKtic3p2Ag3aq5LAhOl4CSP2SkvtUMmcJ1caunBtiaicPr3iac9iadFWU7KJfg/640?wx_fmt=png" alt="640?wx_fmt=png"></p><h1 style="font-size:20px;font-weight:bold;line-height:25px;background:rgb(22,159,230);color:rgb(235,235,235);font-family:'微软雅黑', '宋体', '黑体', Arial;"><a name="t1"></a>准备</h1><p style="font-family:'微软雅黑', PTSans, Arial, sans-serif;font-size:15px;background-color:rgb(255,255,255);">首先,你需要搭建一套RabbitMQ系统,搭建过程在此不再叙述,如果大家觉得麻烦,可以用我搭好的。</p><p style="font-family:'微软雅黑', PTSans, Arial, sans-serif;font-size:15px;background-color:rgb(255,255,255);">HostName:&nbsp;<strong><span style="color:rgb(255,0,0);">coderayu.cn</span></strong>&nbsp; UserName:guest Password:guest&nbsp; (仅仅可用作实验,数据丢失不负责)</p><p style="font-family:'微软雅黑', PTSans, Arial, sans-serif;font-size:15px;background-color:rgb(255,255,255);">创建Asp.Net Core 项目,并引入Nuget包</p><p style="font-family:'微软雅黑', PTSans, Arial, sans-serif;font-size:15px;background-color:rgb(255,255,255);">你可以运行以下下命令在你的项目中安装 CAP。</p><pre>PM&gt; Install-Package DotNetCore.CAP</pre><p style="font-family:'微软雅黑', PTSans, Arial, sans-serif;font-size:15px;background-color:rgb(255,255,255);">如果你的消息队列使用的是 Kafka 的话,你可以:</p><pre>PM&gt; Install-Package DotNetCore.CAP.Kafka</pre><p style="font-family:'微软雅黑', PTSans, Arial, sans-serif;font-size:15px;background-color:rgb(255,255,255);">如果你的消息队列使用的是 RabbitMQ 的话,你可以:</p><pre>PM&gt; Install-Package DotNetCore.CAP.RabbitMQ</pre><p style="font-family:'微软雅黑', PTSans, Arial, sans-serif;font-size:15px;background-color:rgb(255,255,255);">CAP 提供了 Sql Server, MySql, PostgreSQL 的扩展作为数据库存储:</p><pre><span style="color:rgb(0,128,0);line-height:1.5;">//</span><span style="color:rgb(0,128,0);line-height:1.5;"> 按需选择安装你正在使用的数据库</span>PM&gt; Install-<span style="line-height:1.5;">Package DotNetCore.CAP.SqlServer
    

    PM> Install-Package DotNetCore.CAP.MySql
    PM
    > Install-Package DotNetCore.CAP.PostgreSql

    创建DbContext

    因为我采用的是EF Core,所以首先要创建一个DbContext上下文,代码如下:

    640?wx_fmt=png

    Startup配置

    首先需要在ConfigureServices函数中进行相关服务的注入,对应的操作和功能解释如下:

    640?wx_fmt=png

    最后还要再Congiure中启用CAP中间件

    640?wx_fmt=png

    利用EF Core生成CAP数据库

    再程序包管理控制台中依此输入以下命令行

    PM> Add-Migration Init
    PM> update-database

    如果成成功执行,那么打开数据库,就可以看到用来存储CAP发送和接收数据的表格了。

    640?wx_fmt=png

    表格中每列的含义如下:

    640?wx_fmt=png

     

    消息的发送和订阅

    我们直接在ValuesController的基础上进行改造。

    在 Controller 中注入 ICapPublisher 然后使用 ICapPublisher 进行消息发送


    640?wx_fmt=png

    发送消息

    640?wx_fmt=png

    订阅消息

    640?wx_fmt=png

    Run

    启动程序后,首先看到CAP启动成功

    640?wx_fmt=png

    紧随其后,消费者也就是我们的订阅方法在RabbitMQ服务器上注册成功。

    640?wx_fmt=png

    发送消息,发送成功,如下

    640?wx_fmt=png

    发送后,立即在控制台看到了订阅方法输出的结果。

    640?wx_fmt=png

     

    消息的失败重试

    在订阅方法中,如果抛出异常,那么CAP就会认为该条消息处理失败,会自动进行重试,重试次数在前方已经进行了配置。

    我们把订阅方法做一个改动,打印接收的信息到控制台中,并抛出异常

    640?wx_fmt=png

    可以看到,立即进行了三次重试

    640?wx_fmt=png

    可是在前面,我们设置的失败重试次数是5次,为什么这里只重试三次吗?是不是要叫晓东过来改BUG了呢640?wx_fmt=png?当然不是。

    观察发现,CAP重试的前三次是立即进行的,而后面的重试,是每隔一段时间进行的,当在分布式通讯的过程中,可能出现了问题确实不会立即修复解决,可能过了一定时间,系统就自动恢复了,如网络抖动。

     

    CAP仪表盘

    640?wx_fmt=png

    发送成功了五条消息,成功接收处理了三条,两条处理失败,处理失败的任务,我们可以直接在面板中进行重新消费,可谓非常方便。

    640?wx_fmt=png

    同时,处理失败的消息,点击消息的编号后,可以查看到消息的内容和异常原因。

    640?wx_fmt=png

     

    CAP如此强大,让消息队列这种高大上产品操作So Easy,学会了CAP,也可以吹牛说,我也懂分布式任务处理啦640?wx_fmt=png

    感谢晓东开发出如此强大的项目,同时感谢.Net Core Community。

    参考 CAP Github wiki

    https://github.com/dotnetcore/CAP/wiki

    本博客Demo代码

    https://github.com/liuzhenyulive/CAP.Demo

    相关文章:

    原文地址: https://www.cnblogs.com/CoderAyu/p/9527012.html


    .NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

    640?wx_fmt=jpeg





  • 相关阅读:
    spoj227 树状数组插队序列问题
    hdu2838树状数组解逆序
    hdu2642二维树状数组单点更新
    hdu1556 树状数组区间更新单点查询板子
    hdu3015树状数组 poj1990的离散化版本
    poj1990两个树状数组
    Python中面向对象和类
    Python中面向对象和类
    Python中的字典dict
    Python中的字典dict
  • 原文地址:https://www.cnblogs.com/owenzh/p/11541661.html
  • Copyright © 2020-2023  润新知