CAP 2.6 版本发布通告
前言
今天,我们很高兴宣布 CAP 发布 2.6 版本正式版。同时我们也很高兴的告诉你 CAP 在 GitHub 已经突破了3000 Star.
自从上次 CAP 2.5 版本发布 以来,已经过去了几个月的时间,关注的朋友可能知道,在这几个月的时间里,也发布了几个预览版的 2.6 版本的NuGet包。
简介
可能有些人还不知道 CAP 是什么,老规矩来一个简介。
CAP 是一个用来解决微服务或者分布式系统中分布式事务问题的一个开源项目解决方案(https://github.com/dotnetcore/CAP)同样可以用来作为EventBus使用,目前已经2岁了,目前已经应用到了很多的公司和项目中,
想对 CAP 更多了解的同学可以看下官方文档。
本次在 CAP 2.6 版本中我们主要带来了以下新特性:
- 启用新 Logo
- 更加完善的文档支持(英文,中文)
- 单例的 ICapPublisher
- 支持多个消费者线程
- Diagnostic特性的改进
- 其他改进
下面我们就来逐一看一下这些新的特性。
启用新 Logo
我们终于有自己的 Logo 了,这个Logo由四个颜色的 C 组成,我来简单介绍下。
紫色:紫色是 NCC 组织 Logo 的颜色,代表了 CAP 的发源。
蓝色:自由和希望的象征,也是我喜欢的颜色。
红色:中国的颜色,也代表充满活力与激情。
橙色:在喧嚣的世界中保持一份宁静,温暖,阳光。
完善文档支持
我们深知文档对于一个开源项目的重要性,在上一版我们的文档写的比较乱而且对于目录结构的规划不合理,这导致我们的用户不能快速的找到他们想要了解的内容,我们已经意识到了这一点。
在新版本中,我们完善了我们的文档,我们对文档进行了一轮新的重新梳理,以便于阅读更加方便,以及快速找到需要的内容。
以下是我们新的文档的目录结构:
Monitoring 章节目前还在完善中,我们会等到下一个版本中完善。
英文文档对于CAP国际化也非常的重要,所以我们的文档以双语形式提供,在此也非常感谢上一版中对CAP文档进行翻译的小伙伴们。
你可以在下面的链接中找到我们最新的文档信息,如果您发现有错误的地方,欢迎点击页面右上角修改按钮提交PR进行修正。
ICapPublisher 默认为单例
经过一些用户的反馈,我们了解到将 ICapPubliser
默认注册为 Scoped
会存在一些问题,特别是对于依赖注入容器生命周期不是特别了解的同学,可能会造成线程安全问题。
另外,对于在控制台(Console)应用程序中使用 CAP 的同学来说,Scoped
这种作用域的生命周期并不能起到应有作用,而且会造成在一些单例的对象中引用 ICapPubliser
造成无法释放的问题。
针对以上问题,我们在这一个版本中进行了调整。
- 调整
ICapPublisher
默认注册为单例。 - 更改
ICapPublisher
接口中Transaction
属性为AsyncLocal<ICapTransaction>
。
针对于第 1 点,你现在可以在任何你需要的地方注入 ICapPublisher
进行使用而不用担心对象生命周期的问题。
针对于第 2 点,由于 ICapPublisher
现在为单例,所以我们将 Transaction
属性调整为了 AsyncLocal<ICapTransaction>
以便于能够进行释放。对于使用 CAP 封装的高级 API 的同学来说这个调整对你没有影响,如果您进行了一些自定义的事务对象接入的话,那么需要进行修改一下。
修改示例可以参考下面代码,注意注释部分:
public static IDbTransaction BeginTransaction(this IDbConnection dbConnection,
ICapPublisher publisher, bool autoCommit = false)
{
if (dbConnection.State == ConnectionState.Closed)
{
dbConnection.Open();
}
var dbTransaction = dbConnection.BeginTransaction();
// 从ServiceProvider中拿到 CapTransactionBase 赋值给 publisher.Transaction
publisher.Transaction.Value = publisher.ServiceProvider.GetService<CapTransactionBase>();
// 传递 dbTransaction 事务对象给 CAP 的事务对象接口
var capTransaction = publisher.Transaction.Value.Begin(dbTransaction, autoCommit);
return (IDbTransaction)capTransaction.DbTransaction;
}
支持多个消费者线程
我们收到用户反馈,在使用 CAP 进行一些高数据量传输的项目中 ( 这些项目不太需要对消息进行严格的事务保证 ),消费者一个线程可能不能及时的进行处理,这可能导致消费者消息堆积严重。
在以前如果想要提高消费者处理速度,需要起多个消费者实例以进行负载均衡,但是对于单个实例来说并没有达到系统瓶颈。
在新版本中,我们提供了一个选项,以支持使用多个消费者线程进行消息的处理。你可以如下这样配置:
services.AddCap(x =>
{
x.ConsumerThreadCount = 线程数量
}
改进 Diagnostics 支持
感谢 @gfx687 这位俄罗斯朋友对此贡献的 PR#380,#382。
现在,你可以利用 CAP 提供的 Diagnostics 特性对于 Header 进行自定义写入。
也就是说可以利用此特性对消息进行全链路的追踪,从 Controller/Service-->Message Queue--> Consumer。
如果你感兴趣,可以查看我的这篇文章了解更多关于 Diagnostics 的信息。
其他改进
- 性能提升
在此版本中,我们进行了一些小范围的代码优化。
感谢 @hetaoos 的 PR#365 ,感谢 @liuzhenyulive 的 PR#390 。
- Bug修复
在此版本中,修复了一些bug。具体可以查看这里的 release 日志了解更多。
- 依赖的 NuGet 包更新
总结
以上,就是本版本中支持的一些新特性,感谢大家的支持,我们很开心能够帮助到大家
。大家在使用的过程中遇到问题希望也能够积极的反馈,帮助CAP变得越来越好。
CAP 2.6 版本发布通告的更多相关文章
- 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.1 版本发布通告 - 你期待的 Redis 来了
前言 今天,我们很高兴宣布 CAP 发布 5.1 版本正式版,在这个版本里我们同样引入了更多令人激动的新特性和改进,同时也得到越来越多人的喜爱. 得益于社区的反馈和贡献者的支持,在过去的两个月里,我们 ...
- 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年的最后一 ...
随机推荐
- LeetCode_32
LeetCode 32 题目描述: 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1: 输入: "(()" 输出: 2 解释: 最长有效 ...
- 基于Bitnami gitlab OVA包的gitlab 环境搭建
前言 最近在折腾gitlab,本篇记录搭建的过程方便以后查找 环境 Windows server + VMware 安装 为方便本次我们直接采用Bitnami的VOA安装包(VOA格式可同时兼容Vir ...
- Visual Studio 调试(系列文章)
调试是软件开发过程中非常重要的一个部分,它具挑战性,但是也有一定的方法和技巧. Visual Studio 调试程序有助于你观察程序的运行时行为并发现问题. 该调试器可用于所有 Visual Stud ...
- HttpWebRequest的使用之Get和Post的差别(C#)
这两天做的是通过一个HttpWebRequest将采集地址发送到服务端,服务端会返回一个JSON格式的字符串,然后我这边再对这个JSON进行反序列化,得到我想要的数据.在这篇文章里我简单介绍一下Htt ...
- C#命名规范(简述)
命名空间,类,事件,接口,常量,属性,方法使用Pascal命名,即首字母大写 参数,变量(类字段)使用camel命名法,即首字母小写. Pascal 方式--所有单词第一个字母大写,其他字母小写. ...
- manjaro配置记录
一.换源 官方镜像源(包括 core, extra, community, multilib ) sudo pacman-mirrors -i -c China -m rank //更新镜像排名 su ...
- spring使用thymeleaf
一.spring使用thymeleaf做解析器其实很简单,这是基于xml配置的方式 <?xml version="1.0" encoding="UTF-8" ...
- ES 23 - 检索和过滤的区别 (query vs. filter)
目录 1 filter与query示例 1.1 准备测试数据 1.2 搜索测试 2 filter与query的区别 2.1 相关度处理上的不同 2.2 性能上的对比 2.3 对比结论 本文以 ES 6 ...
- Web前端开发——Ionic 3.0【爱创课堂专业前端培训】
前端开发——Ionic 3.0 一.Ionic 移动端有三种开发方向 源生APP开发, 移动端web开发 混合开发(介于以上两者之间的) 类微信小程序 reactNative,用react语法,开发a ...
- 浅入深出Vue:自动化路由
在软件开发的过程中,"自动化"这个词出现的频率是比较高的.自动化测试,自动化数据映射以及各式的代码生成器.这些词语的背后,也说明了在软件开发的过程中,对于那些重复.千篇一律的事情. ...