CAP 5.1 版本发布通告 - 你期待的 Redis 来了
前言
今天,我们很高兴宣布 CAP 发布 5.1 版本正式版,在这个版本里我们同样引入了更多令人激动的新特性和改进,同时也得到越来越多人的喜爱。
得益于社区的反馈和贡献者的支持,在过去的两个月里,我们NuGet的下载量增加了20万,贡献者团队达到了57人,同时我们也发现了非常多的国外贡献者的参与,这说明 CAP 在海外的用户也正在迅速增长,在此我表示非常的感谢。
在 5.1 版本中,我们带来了大家期待已久的 Filter 功能,以及对 Redis Streams 的支持,同时我们重写了 Dashboard,下面我们就具体来看一下吧。
总览
可能有些人还不知道 CAP 是什么,老规矩来一个简介。
CAP 是一个用来解决微服务或者分布式系统中分布式事务问题的一个开源项目解决方案(https://github.com/dotnetcore/CAP)同样可以用来作为 EventBus 使用,该项目诞生于2016年,目前在 Github 已经有超过 4800 Star 以及超过 95万 的下载量,已经在越来越多公司的和项目中得到应用。
如果你想对 CAP 更多了解,请查看我们的 官方文档。
本次在 CAP 5.1 版本中我们主要带来了以下新特性:
- 增加了对订阅者 Filter 的支持
- 增加了对 Redis Streams Transport 的支持
- 改进 新版基于 Vue 的 Dashboard
- 改进 Kafka Transport 对通配符的订阅的支持
- 改进 RabbitMQ 对异构系统的支持
- 其他功能改进和若干 Bug 修复
增加了对订阅者 Filter 的支持
根据社区得到的反馈,在一些场景下需要对订阅者方法应用一些 AOP 拦截功能以达到某种目的,例如记录日志或自动开启事务等功能。
在过去,我们通过对第三方 AOP 组件提供支持来做到这一点,例如我们写了一篇 博客 来描述如何在 CAP 5.0版本中使用 Castle 来对订阅方法进行拦截,这使我们得到了一些赞扬。但同时我们也发现了这种方式存在一些缺点,例如无法方便的在代理类中进行构造函数注入以及方法需要设定为 virtual 另外还有拦截器生命周期控制等问题。
基于以上原因,现在 CAP 直接提供了对订阅者 Filter 的支持,这使得问题大大简化以及获得了配置体验上的提升,下面简单看一下如何使用。
- 新建一个自定义过滤器类,继承
ISubscribeFilter接口
public class MyCapFilter: ISubscribeFilter
{
public void OnSubscribeExecuting(ExecutingContext context)
{
// 订阅方法执行前
}
public void OnSubscribeExecuted(ExecutedContext context)
{
// 订阅方法执行后
}
public void OnSubscribeException(ExceptionContext context)
{
// 订阅方法执行异常
}
}
- 在CAP配置中添加上面的自定义过滤器类
services.AddCap(opt =>
{
// ***
}.AddSubscribeFilter<MyCapFilter>();
以上就是全部的集成工作,是不是变得非常容易。
增加了对 Redis Streams Transport 的支持
首先感谢来自埃及的 Mahmoud Samir 对此功能提供的 PR 支持。
我们知道,根据可用性原则,你的系统依赖的组件数量越少,那么整体出现问题的概率就越低,你越能够对其进行控制。 那么这也是我们此次考虑对引入 Redis 的考虑之一,对于小型系统来说引入额外的中间件会增加复杂性,很多用户并不愿意。
那么,为什么我们在过去没有对Redis支持呢? 这主要是一段时间以来,Redis 发布/订阅模式的功能有限,也就是 pub/sub 无法满足需求,该功能的典型缺点是没有一种确认(Acknowledge)机制来保证消息是被送达的。
Stream 是 Redis 5.0 引入的一种新的数据类型,它以一种更抽象的方式建模日志数据结构。 除了提供确认功能外,还提供了我们所需的 Consumer Groups 功能,所以我们将其放到了我们的支持列表中。
集成方式:
PM> Install-Package DotNetCore.CAP.RedisStreams
services.AddCap(x =>
{
// ...
x.UseRedis(...);
});
新版基于 Vue 的 Dashboard
在这个版本中,我们对我们的Dashboard进行了更换,熟悉 hangfire的同学可能知道CAP的dashboard最初来自于改写的hangfire ui,这主要是由于在 .NET Core的早期阶段没有一种合适的方式来将 Razor 页面嵌入到 (DLL) NuGet 包中,Hangfire采用了一种将 Razor页面生成为 C# 代码并且编译到程序集中的方式来解决这一问题,这主要利用到了一款第三方 Visual Studio 扩展工具,但该工具自2019年以来已经没有继续更新。
另外的原因是由于 Dashbaord 目前的生成方式不利于对代码进行维护,有时会出现莫名其妙的编译问题,而且需要安装VS扩展工具,这让我们的贡献者参与其中变得沮丧。
在新版本重写开始之前,我们调研了 Blazor 的方案,但最终没有采纳。 这是由于 Blazor 集成需要额外配置的东西太多而且较为分散,很难提供一种非常简便的配置方式,这对于CAP作为一个库来说不是非常合适。在此感谢 BootstrapBlazor 的作者张同学对此提供的支持和建议。
所以,我们最终选择了使用 Vue 来重写我们的 Dashboard ,但这对于我来说这是一项较为挑战的工作,因为我从没写过前端代码,最终花了一周左右的时间完成了整个工作,ps: 代码可能较为粗糙,前端好的同学欢迎提交 PR 重构。
样例图:

Transport 中的改动
改进 Kafka 对通配符的订阅的支持
过去只有 RabbitMQ 支持此功能,那么现在在 Kafka 订阅方法中,你也可以使用 * 和 # 通配符来进行批量订阅。
*可以代替一个或多个词
#可以代替零或多个词
看图理解(图片来源RabbitMQ 官网):

在这个例子中,我们将发送所有描述动物的消息。消息将使用由三个词(两个点)组成的路由名称发送。名称中的第一个词将描述 敏捷(celerity),第二个词描述颜色(colour),第三个词描述物种(species):“ .. ”。
我们创建了三个绑定:Q1 与绑定键“ .orange. ”绑定,Q2 与“ ..rabbit ”和“ lazy.# ”绑定。
这些绑定可以总结为:
Q1 对所有橙色动物都感兴趣。
Q2 想收听关于兔子的一切,以及关于懒惰动物的一切。
改进 RabbitMQ 对异构系统的支持
由于CAP处理消息需要有一些固定的信息,如果发送过来的消息没有携带这些信息,那么就会报错。然而如果你的上游不使用CAP,或者需要其他系统进行对接,那么怎么办呢?
在这个版本中,我们对 RabbitMQ 增加了 CustomHeaders 配置项,你可以使用这个配置对必须的头信息进行填充,用法如下:
cap.UseRabbitMQ(x =>
{
x.HostName = "xxxx";
x.UserName = "xxxx";
x.Password = "xxxx";
x.CustomHeaders = e => new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>(Headers.MessageId, SnowflakeId.Default().NextId().ToString()),
new KeyValuePair<string, string>(Headers.MessageName, e.RoutingKey),
};
});
其他
其他的一些改进项目包括:
1、我们将所有的 nuget 的依赖包都升级到了最新版本。
2、修复了一些已知的Bug,你可以在这里看到。
总结
以上,就是本版本中支持的一些新特性,感谢大家的支持,我们很开心能够帮助到大家
。大家在使用的过程中遇到问题希望也能够积极的反馈,帮助CAP变得越来越好。
如果你喜欢这个项目,可以通过下面的连接点击 Star 给我们支持。
如果你觉得本篇文章对您有帮助的话,感谢您的【推荐】。
如果你对 .NET Core 有兴趣的话可以关注我,我会定期的在博客分享我的学习心得。
本文地址:http://www.cnblogs.com/savorboard/p/cap-5-1.html
作者博客:Savorboard
本文原创授权为:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
CAP 5.1 版本发布通告 - 你期待的 Redis 来了的更多相关文章
- CAP 2.6 版本发布通告
前言 今天,我们很高兴宣布 CAP 发布 2.6 版本正式版.同时我们也很高兴的告诉你 CAP 在 GitHub 已经突破了3000 Star. 自从上次 CAP 2.5 版本发布 以来,已经过去了几 ...
- CAP 3.0 版本发布通告
前言 大家好,我们很高兴宣布 CAP 发布了 3.0 版本正式版. 自从上次 CAP 2.6 版本发布 以来,已经过去了几个月的时间,关注的朋友可能知道,在这几个月的时间里,也发布了几个预览版的 3. ...
- CAP 3.1 版本发布通告
前言 今天,我们很高兴宣布 CAP 发布 3.1 版本正式版.同时我们也很高兴的告诉你 CAP 在 GitHub 已经突破了 4000 Star. CAP 3000 Star 还是去年8月份的时候,最 ...
- CAP 5.0 版本发布通告
前言 今天,我们很高兴宣布 CAP 发布 5.0 版本正式版.同时我们也很高兴的告诉你 CAP 已经有越来越多的用户并且变得越来越流行. 在 5.0 版本中,我们主要致力于更好的支持 .NET 5 以 ...
- CAP 5.2 版本发布通告
前言 今天,我们很高兴宣布 CAP 发布 5.2 版本正式版,在这个版本中,我们主要致力于更好的优化使用体验以及支持新的 Transport,同时在该版本也进行了一些 bug 修复的工作. 自从 5. ...
- CAP 6.0 版本发布通告 - 支持 OpenTelemetry
前言 今天,我们很高兴宣布 CAP 发布 6.0 版本正式版,在这个版本中,我们主要致力于对 OpenTelemetry 提供支持,以及更好的适配 .NET 6. 那么,接下来我们具体看一下吧. 总览 ...
- CAP 6.1 版本发布通告
前言 今天,我们很高兴宣布 CAP 发布 6.1 版本正式版,在这个版本中我们主要针对目前已经发现的几个BUG进行了修复了以及添加了一些小特性. 那么,接下来我们具体看一下吧. 总览 可能有些人还不知 ...
- CAP 6.2 版本发布通告
前言 今天,我们很高兴宣布 CAP 发布 6.2 版本正式版,在这个版本中我们主要做了一些功能优化,以及针对目前已经发现的几个 BUG 进行了修复了. 那么,接下来我们具体看一下吧. 总览 可能有些人 ...
- CAP 2.4版本发布,支持版本隔离特性
前言 自从上次 CAP 2.3 版本发布 以来,已经过去了几个月的时间,这几个月比较忙,所以也没有怎么写博客,趁着2019年到来之际(现在应该是2019年开始的时候),CAP也发布了2018年的最后一 ...
随机推荐
- 浅谈Java的反射机制和作用
浅谈Java的反射机制和作用 作者:Java大师 欢迎转载,转载请注明出处 很多刚学Java反射的同学可能对反射技术一头雾水,为什么要学习反射,学习反射有什么作用,不用反射,通过new也能创建用户对象 ...
- Weekly Contest 138
1051. Height Checker Students are asked to stand in non-decreasing order of heights for an annual ph ...
- LA4636积木艺术
题意: 有一些1*1*1的单位正方体积木,现在要摆积木,每一块积木有两种方法,要么放在地面上,要么放在别的积木的正上方,现在给你摆好积木的正面图和侧面图,问你最少用了多少块积木. 思路: ...
- Shodan的使用
目录 Shodan Shodan工作原理 Shodan的使用 使用搜索过滤 Kali中安装 Shodan Kali中Shodan的使用 Shodan Shodan 是一个搜索引擎,但它与 Google ...
- Win64 驱动内核编程-12.回调监控进线程创建和退出
回调监控进线程创建和退出 两个注册回调的函数:PsSetCreateProcessNotifyRoutine 进程回调PsSetCreateThreadNotifyRoutine 线程回调分 ...
- Intel汇编语言程序设计学习-第六章 条件处理-上
条件处理 本章要点 1.简介 2.布尔和比较指令 3.条件跳转 4.条件循环指令 5.条件结构 6.应用:有限状态机 7.决策伪指令 6.1 简介 本章,读者将看到高级条件分支如何翻译成底层的实现代 ...
- 神经网络与机器学习 笔记—单神经元解决XOR问题
单神经元解决XOR问题 有两个输入的单个神经元的使用得到的决策边界是输入空间的一条直线.在这条直线的一边的所有的点,神经元输出1:而在这条直线的另一边的点,神经元输出0.在输入空间中,这条直线的位置和 ...
- (邹博ML)矩阵和线性代数
主要内容 矩阵 特征值和特征向量 矩阵求导 矩阵 SVD的提法 奇异值分解(Singular Value Decomposition)是一种重要的矩阵分解方法,可以看做对称方阵在任意矩阵上的推广. 假 ...
- [CSP-J2019 江西] 道路拆除 题解
发现大家都是将路径拆成三条链来做,这里提供一种暴力的乱搞方法. 思路 看到这一道题的第一想法就是跑最短路.可是仔细想想就发现,由于重合的路径只算一遍,所以导致两条最短路不一定是最优解. 接着,看到数据 ...
- VMware-viclient-all
VMware-viclient-all https://my.vmware.com/web/vmware/details?productId=491&downloadGroup=ESXI60U ...