CAP 5.2 版本发布通告
前言
今天,我们很高兴宣布 CAP 发布 5.2 版本正式版,在这个版本中,我们主要致力于更好的优化使用体验以及支持新的 Transport,同时在该版本也进行了一些 bug 修复的工作。
自从 5.1 版本发布预览版以来,也过去了几个月的时间,在这些的时间里,我们也发布了几个小版本(5.1.1, 5.1.2, 5.1.3),感谢这些版本的使用者并向我们报告 Bug 和反馈问题的用户,另外我们还收到了非常多的 PR 改进,还要感谢这些使用者。
那么,接下来我们具体看一下吧。
总览
可能有些人还不知道 CAP 是什么,老规矩来一个简介。
CAP 是一个用来解决微服务或者分布式系统中分布式事务问题的一个开源项目解决方案(https://github.com/dotnetcore/CAP)同样可以用来作为 EventBus 使用,该项目诞生于2016年,目前在 Github 已经有超过 5000+ Star 和近 70 个贡献者,以及在 NuGet 超过 150万的下载量,并在越来越多公司的和项目中得到应用。
如果你想对 CAP 更多了解,请查看我们的 官方文档。
本次在 CAP 5.2 版本中我们主要带来了以下新特性:
- 支持 Apache Pulsar 作为传输器
- 改进支持 NATS JetStream
- 支持消费者组隔离处理
- 支持基于程序集查找订阅者
- 改进 Dashboard 支持自定义认证
- 改进内存的消息流控
- 更新依赖的 NuGet 包到最新版本
- 数个 Bug 修复
支持 Apache Pulsar 作为传输器
Apache Pulsar 是一个云原生、分布式消息传递和流媒体平台,具有多租户、高性能等优势。 Pulsar 最初是由雅虎开发,主要应用于雅虎邮件、金融、体育、Flickr、Gemin广告平台,目前由 Apache 软件基金会管理。
官网文档:https://pulsar.apache.org/docs/en/standalone/
CAP Pulsar 文档:https://cap.dotnetcore.xyz/user-guide/en/transport/pulsar/
Pulsar 在 CAP 的集成方式:
services.AddCap(x =>
{
x.UsePulsar(opt => {
//Pulsar options
});
// x.UseXXX ...
});
个人觉得 Pulsar 相比Kafka 的主要优势除了标准的 Broker功能之外,还提供了诸如多租户的功能,另外还有就是原生支持分层存储,这个特性在某些需要大量存储的场景可以将长期数据存储到诸如 S3 等地方来降低成本。
改进支持 NATS JetStream
在 5.0 版本中,我们对 NATS 提供了支持,由于之前版本的 NATS 发布订阅不支持消息的持久化,所以就没有 Acknowledge。 所以我们就使用的 Request-Reply 来变相实现消息确认。
在 NATS 2.0 时代,下一代 NATS Streaming 被命名为 NATS JetStream, JetStream 更加强大,功能也更加丰富,完全满足 CAP 的要求,于是在这个版本中我们就切换为了 JetStream 。
关于 JetStream 可以在这里查看:https://docs.nats.io/jetstream/jetstream
CAP在内部的切换到了 JetStream,使用方式还是和之前一样无任何变化。
CAP 的 NATS JetStream 支持文档:
https://cap.dotnetcore.xyz/user-guide/en/transport/nats/
支持消费者组隔离 Processor
我们知道,CAP在设计之初被定义为微服务或者SOA系统使用。但是这并不妨碍热情的人们在其他系统中对其的使用,一位波兰朋友在他的单体应用中使用 CAP 发件箱模式来存储消息。
简单说一下他的场景,他的单体应用分为很多模块,例如订单模块、消息模块、报表模块等等,他需要在这些模块之间广播消息,所以会利用到CAP提供的消费者组,这样生产者发送的消息可以让每个模块都能够消费到。在微服务中这没有问题,因为每个服务都是单独的组,都会有单独的进程去处理这些消息。
但是在单体应用中由于CAP内部统一接到消息然后在内存中做的多个 ConsumerThread 分发,所以这可能会导致由于某个组的消息消费时间过长从而导致将 所有的 ConsumerThread 耗尽,而那些需要被尽快处理的组的消息被积压。
所以,针对以上问题我们在这个版本对上述场景做了优化,我们新增加了 UseDispatchingPerGroup 选项,你可以将其设置为 True 来配置每个组都使用单独的消费者线程处理。
感谢 @Dariusz Lenartowicz 对此做出的 PR。
支持基于程序集查找订阅者
如果一个服务依赖了多个程序集,并且订阅者分布在依赖的程序集中,我们提供了一个新的 API 来支持从这些程序集中查找订阅者。
services.AddCap(x =>
{
//...
}).AddSubscriberAssembly([...assemblies]);
改进 Dashboard 支持自定义认证
我们在5.1.0版本中重构了Dashboard,在这个版本中我们对身份认证进行了重构,现在你可以利用ASP.NET Core的身份认证体系来对Dashboard进行认证。
简单来说,就是实现 ASP.NET Core 认证中提供的 AuthenticationHandler<T> 然后在 HandleAuthenticateAsync 中添加自定义逻辑。
public class MyDashboardAuthenticationHandler : AuthenticationHandler<MyDashboardAuthenticationSchemeOptions>
{
public MyDashboardAuthenticationHandler(IOptionsMonitor<MyDashboardAuthenticationSchemeOptions> options,
ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock)
{
options.CurrentValue.ForwardChallenge = "";
}
protected override Task<AuthenticateResult> HandleAuthenticateAsync()
{
var testAuthHeaderPresent = Request.Headers["X-Base-Token"].Contains("xxx");
var authResult = testAuthHeaderPresent ? AuthenticatedTestUser() : AuthenticateResult.NoResult();
return Task.FromResult(authResult);
}
protected override Task HandleChallengeAsync(AuthenticationProperties properties)
{
Response.Headers["WWW-Authenticate"] = "MyDashboardScheme";
return base.HandleChallengeAsync(properties);
}
private AuthenticateResult AuthenticatedTestUser()
{
var claims = new[] { new Claim(ClaimTypes.Name, "My Dashboard user") };
var identity = new ClaimsIdentity(claims, "MyDashboardScheme");
var principal = new ClaimsPrincipal(identity);
var ticket = new AuthenticationTicket(principal, "MyDashboardScheme");
return AuthenticateResult.Success(ticket);
}
}
你可以在这里找到一个详细的示例:https://github.com/dotnetcore/CAP/tree/master/samples/Sample.Dashboard.Auth
改进发布订阅消息流控
在CAP内部实现上,发送和接收的消息都会先存储在内存中,然后统一来进行调度。在过去,内存中消息的数量可以无限增长,这会导致应用所占用的内存也会随之增加,特别是在一些压力测试的场景中会明显的看到。在这个版本中,我们对在内存中的消息进行了流控,也就是说如果内存的消息达到了最大值,将限制发送和接收的速率从而将内存控制在一个合理的范围内。
这也会和你设置的 ProducerThreadCount , ConsumerThreadCount 参数有关,使用的线程数越多,内存允许的消息数量就越多。
其他
其他的一些改进项目包括:
1、我们将所有的 nuget 的依赖包都升级到了最新版本。
2、修复了一些已知的Bug,你可以在这里看到。
总结
以上,就是本版本中支持的一些新特性,感谢大家的支持,我们很开心能够帮助到大家
。大家在使用的过程中遇到问题希望也能够积极的反馈,帮助CAP变得越来越好。
如果你喜欢这个项目,可以通过下面的连接点击 Star 给我们支持。
如果你觉得本篇文章对您有帮助的话,感谢您的【推荐】。
如果你对 .NET Core 有兴趣的话可以关注我,我会定期的在博客分享我的学习心得。
本文地址:http://www.cnblogs.com/savorboard/p/cap-5-2.html
作者博客:Savorboard
本文原创授权为:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
CAP 5.2 版本发布通告的更多相关文章
- 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.1 版本发布通告 - 你期待的 Redis 来了
前言 今天,我们很高兴宣布 CAP 发布 5.1 版本正式版,在这个版本里我们同样引入了更多令人激动的新特性和改进,同时也得到越来越多人的喜爱. 得益于社区的反馈和贡献者的支持,在过去的两个月里,我们 ...
- 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年的最后一 ...
随机推荐
- 最详细的搭建web自动化测试网站,别再说你没有实战项目(文未有福利)
一步步教你搭建开源网站 环境准备: Tomcat shopping商城文件 jdk环境 Mysql环境 解压shopping.rar拷贝至tomcat/webapps 在navicat导入数据库db_ ...
- mysql面试题及答案,mysql最新面试题,mysql面试题大全汇总
mysql最新面试题及答案汇总 Mysql 的存储引擎,myisam和innodb的区别.mysql最新面试题 答: 1.MyISAM 是非事务的存储引擎,适合用于频繁查询的应用.表锁,不会出现死锁, ...
- Vue自定义标签页,并且在其中渲染Echarts图表
目录 一.需求说明 二.标签页功能实现 一.需求说明 1.点击标签按钮切换不同的echarts图表,考虑用Ant Design Vue,但是其样式无法自定义 2.div的整体布局样式使用tailwin ...
- Centos7 配置JDK 提示 /lib/ld-linux.so.2: bad ELF interpreter: No such file or direct
解决办法:yum install glibc.i686
- 不会SQL也能做数据分析?浅谈语义解析领域的机会与挑战
笔者按: 在第5次AI TIME PhD Debate上,笔者邀请了部分国内外语义解析领域的杰出华人学者共话语义解析的过去,现状和未来.本博客为笔者根据视频讨论总结的干货整理.对原视频感兴趣的同学可以 ...
- scrapy爬虫简单项目入门练习
[写在开头] scrapy环境配置配置好了之后,开始着手简单项目入门练习.关于环境配置见上一篇博客https://www.cnblogs.com/ljxh/p/11235079.html. [正文部分 ...
- Bug概述、状态、类型、级别、优先级提交和Bug生命周期管理
缺陷概述: 1)缺陷(Defect):是指存在于软件之中偏差,可被激活,以静态形式存在于软件内部,相当于Bug. 2)故障(Fault):当缺陷被激活后,软件运⾏中出现的状态,可引起意外情况,若不加处 ...
- SharkCTF2021 The_nature_of_the_human
(信安数基的quiz1写不出来 来这放题解泄愤) crypto类题. 题面 其加密的大致过程是,对明文flag中的逐个字符,随机使用三种加密方式: 第一种,对该字符进行sha256加密后以16进制形式 ...
- 【UE4 C++ 基础知识】<11>资源的同步加载与异步加载
同步加载 同步加载会造成进程阻塞. FObjectFinder / FClassFinder 在构造函数加载 ConstructorHelpers::FObjectFinder Constructor ...
- canvas中的优先级,.after最前,before最底,canvas中间,部件在布局下面
<RelativeWidget>: # 画布之后 canvas.before: Color: # 白色 rgba:[1,1,1,1] Rectangle: pos:self.pos # 最 ...