前言

今天,我们很高兴宣布 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进行修正。

文档:https://cap.dotnetcore.xyz

ICapPublisher 默认为单例

经过一些用户的反馈,我们了解到将 ICapPubliser 默认注册为 Scoped 会存在一些问题,特别是对于依赖注入容器生命周期不是特别了解的同学,可能会造成线程安全问题。

另外,对于在控制台(Console)应用程序中使用 CAP 的同学来说,Scoped 这种作用域的生命周期并不能起到应有作用,而且会造成在一些单例的对象中引用 ICapPubliser 造成无法释放的问题。

针对以上问题,我们在这一个版本中进行了调整。

  1. 调整 ICapPublisher 默认注册为单例。
  2. 更改 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 版本发布通告的更多相关文章

  1. CAP 3.0 版本发布通告

    前言 大家好,我们很高兴宣布 CAP 发布了 3.0 版本正式版. 自从上次 CAP 2.6 版本发布 以来,已经过去了几个月的时间,关注的朋友可能知道,在这几个月的时间里,也发布了几个预览版的 3. ...

  2. CAP 3.1 版本发布通告

    前言 今天,我们很高兴宣布 CAP 发布 3.1 版本正式版.同时我们也很高兴的告诉你 CAP 在 GitHub 已经突破了 4000 Star. CAP 3000 Star 还是去年8月份的时候,最 ...

  3. CAP 5.0 版本发布通告

    前言 今天,我们很高兴宣布 CAP 发布 5.0 版本正式版.同时我们也很高兴的告诉你 CAP 已经有越来越多的用户并且变得越来越流行. 在 5.0 版本中,我们主要致力于更好的支持 .NET 5 以 ...

  4. CAP 5.1 版本发布通告 - 你期待的 Redis 来了

    前言 今天,我们很高兴宣布 CAP 发布 5.1 版本正式版,在这个版本里我们同样引入了更多令人激动的新特性和改进,同时也得到越来越多人的喜爱. 得益于社区的反馈和贡献者的支持,在过去的两个月里,我们 ...

  5. CAP 5.2 版本发布通告

    前言 今天,我们很高兴宣布 CAP 发布 5.2 版本正式版,在这个版本中,我们主要致力于更好的优化使用体验以及支持新的 Transport,同时在该版本也进行了一些 bug 修复的工作. 自从 5. ...

  6. CAP 6.0 版本发布通告 - 支持 OpenTelemetry

    前言 今天,我们很高兴宣布 CAP 发布 6.0 版本正式版,在这个版本中,我们主要致力于对 OpenTelemetry 提供支持,以及更好的适配 .NET 6. 那么,接下来我们具体看一下吧. 总览 ...

  7. CAP 6.1 版本发布通告

    前言 今天,我们很高兴宣布 CAP 发布 6.1 版本正式版,在这个版本中我们主要针对目前已经发现的几个BUG进行了修复了以及添加了一些小特性. 那么,接下来我们具体看一下吧. 总览 可能有些人还不知 ...

  8. CAP 6.2 版本发布通告

    前言 今天,我们很高兴宣布 CAP 发布 6.2 版本正式版,在这个版本中我们主要做了一些功能优化,以及针对目前已经发现的几个 BUG 进行了修复了. 那么,接下来我们具体看一下吧. 总览 可能有些人 ...

  9. CAP 2.4版本发布,支持版本隔离特性

    前言 自从上次 CAP 2.3 版本发布 以来,已经过去了几个月的时间,这几个月比较忙,所以也没有怎么写博客,趁着2019年到来之际(现在应该是2019年开始的时候),CAP也发布了2018年的最后一 ...

随机推荐

  1. RecyclerView下拉加载集合越界问题

    问题描述 在做毕业设计app中遇到这样一个问题,使用RecyclerView进行下拉加载数据的时候,比如我每次让它加载5条数据,当服务器端数据总数刚好是5的倍数的时候,不会出现下拉加载数据集合越界的问 ...

  2. C#6.0 新增功能

    连载目录    [已更新最新开发文章,点击查看详细] C# 6.0 版本包含许多可提高开发人员工作效率的功能. 这些功能的总体效果是让你编写的代码更简洁.更具可读性. 该语法不像许多常见做法那样繁琐. ...

  3. C#2.0增功能04 可以为 null 的类型

    连载目录    [已更新最新开发文章,点击查看详细] 可以为 null 的类型是 System.Nullable<T> 结构的实例. 可以为 null 的类型可表示一个基础类型的所有值 T ...

  4. java - 解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法

    通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用JVM中的栈空间: 而通过new关键字和构造器创建的对象则放在堆空间,堆是垃圾收集器管理的主要区域,由于现在的垃圾收 ...

  5. Vue双向绑定原理及其实现

    在之前面试的时候被面试官问到是否了解Vue双向绑定的原理,其实自己之前看过双向绑定的原理,但也就是粗略的了解,但是没有深入.面试官当时让我手写一个原理,但是就蒙了

  6. 树状数组(binary index tree)

    概述 修改和查询复杂度为log(n)的数据结构,所有奇数位的数和原数位置相同,偶数位置是原数组若干位置的和. 假如原数组A(a1, a2, a3, a4 ...),和其对应的树状数组C(c1, c2, ...

  7. Javaweb入门 数据库第二天

    接着说昨天语法中提到的drop,delete和truncate的区别 drop用于删除库和表,不能用于删除表记录 delete和truncate都可以用于删除表记录,不能用于删除库和表 而delete ...

  8. macvtap使用教程

    kubernetes一键安装 macvtap是虚拟机网络虚拟化常用的一种技术,当然容器也可以用. MACVTAP 的实现基于传统的 MACVLAN. 和 TAP 设备一样,每一个 MACVTAP 设备 ...

  9. 改MySQL的编码方式,解决jdbc MySQL中文乱码问题

    进MySQL安装目录,打开my.ini 这两个地方改成gbk 重启服务

  10. ASP.NET Core MVC 之局部视图(Partial Views)

    1.什么是局部视图 局部视图是在其他视图中呈现的视图.通过执行局部视图生成的HTML输出呈现在调用视图中.与视图一样,局部视图使用 .cshtml 文件扩展名.当希望在不同视图之间共享网页的可重用部分 ...