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年的最后一 ...
随机推荐
- springboot启动不设置端口
非web工程 在服务架构中,有些springboot工程只是简单的作为服务,并不提供web服务 这个时候不需要依赖 <dependency> <groupId>org.spri ...
- MYSQL主从复制、主主复制、双主多从配置
一.如何配置MYSQL的主从复制? 1. 两台数据库服务器,IP分别为 192.168.216.128 和 192.168.216.129,在服务器上装MYSQL(我的配置版本为5.5.56) 2. ...
- Centos7配置BIND开机自启动
Centos7上面已经把/etc/init.d/服务的启动方式更改为systemctl启动. 当然编译安装仍然可以/etc/init.d/手动启动但是chkconfig –add named就用不了. ...
- T-SQL 恢复数据库
USE master GO ALTER DATABASE DEMO SET SINGLE_USER GO ALTER DATABASE DEMO SET EMERGENCY GO DBCC CHECK ...
- 【转】解决eclipse连接不到genymotion的问题
(1)很多朋友在使用genymotion开发安卓应用程序的时候,会遇见完全正确的安装但是在运行的时候仍然找不到,genymotion上的设备,在打开的devices上找不到如下图所示: (2)解决的方 ...
- 调试过程中发现按f5无法走进jdk源码
debug 模式 ,在fis=new FileInputStream(file); 行打断点 调试过程中发现按f5无法走进jdk源码 package com.lzl.spring.test; impo ...
- nginx负载均衡策略url_hash配置方法
参考文章: https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/ 根据路径,进行一致性hash,具体的配 ...
- Nginx编译安装模块(非重装)
假如原已经安装好的Nginx,现在需要添加一个未被编译安装的ssl模块,我们该怎么办呢?重装,还是有其他的办法?当然不需要重装的,下面我们看下如何实现的. 1.cd到Nginx解压过后的目录[root ...
- [转载]使用Java操作Mongodb
HelloWorld程序 学习任何程序的第一步,都是编写HelloWorld程序,我们也不例外,看下如何通过Java编写一个HelloWorld的程序. 首先,要通过Java操作Mongodb,必须先 ...
- Streaming+Sparksql使用sql实时分析 rabbitmq+mongodb+hive
SparkConf sparkConf = new SparkConf()//此处使用一个链接切记使用一个链接否则汇报有多个sparkcontext错误 .setAppName("Spark ...