前言

今天,我们很高兴宣布 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 版本发布通告的更多相关文章

  1. CAP 2.6 版本发布通告

    前言 今天,我们很高兴宣布 CAP 发布 2.6 版本正式版.同时我们也很高兴的告诉你 CAP 在 GitHub 已经突破了3000 Star. 自从上次 CAP 2.5 版本发布 以来,已经过去了几 ...

  2. CAP 3.0 版本发布通告

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

  3. CAP 3.1 版本发布通告

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

  4. CAP 5.0 版本发布通告

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

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

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

  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. HTML的一些技巧

    清除form表单 this.$refs.formName.resetFields() 验证表单 this.$refs.createForm.validate((valid) => {}) 当im ...

  2. Java课堂测试1第三阶段

    package sizeyunsuan;//import java.util.Scanner;//import java.util.Random;import java.util.*; public ...

  3. fastjson及其反序列化分析--TemplatesImpl

    fastjson及其反序列化分析 源码取自 https://www.github.com/ZH3FENG/PoCs-fastjson1241 参考 (23条消息) Json详解以及fastjson使用 ...

  4. 5分钟让你掌握Vuex,深入浅出

    5分钟让你掌握Vuex,深入浅出 一.什么是Vuex? 概念:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预 ...

  5. 【HMS Core 6.0全球上线】华为钥匙环服务,打造跨应用跨形态无缝登录体验

    华为钥匙环服务(Keyring),是HMS Core在安全领域开放的全新服务,为全球开发者提供用户认证凭据(以下简称"凭据")本地存储和跨应用.跨形态共享能力,帮助您在安卓应用.快 ...

  6. 浅尝装饰器--property装饰器

    [写在前面] 本帖归属于装饰器单元的学习,可以点击关键词'装饰器'查看其他博文讲解 [正文部分] property属性:将类方法用类属性的形式进行调用 class Good: def __init__ ...

  7. linux系统(centos)下su和sudo命令的区别

    linux系统(centos)下su和sudo命令的区别 区别 我们在日常使用过程中,这2个命令很多时候能达到相同的效果,对细节区别十分模糊,这里进行简单的解释和区分.希望大家能够正确使用这2个命令, ...

  8. 原生js-返回顶部

    html部分: <body style="height:2000px"> <div id="div1"> 返回顶部 </div&g ...

  9. 好好编程BUAA_SE(组/团队) Scrum Meeting 博客汇总

    好好编程BUAA_SE(组/团队) Scrum Meeting 博客汇总 一.Scrum Meeting 1. Alpha Alpha阶段 第一次Scrum Meeting Alpha阶段 第二次Sc ...

  10. 【Azure Redis 缓存】Windows版创建 Redis Cluster 实验 (精简版)

    简介 学习Redis Cluster的第一步,即本地搭建Redis Cluster.但是在Redis的官方文档中,是介绍在Linux系统中搭建Redis Cluster.本文主要介绍在Windows系 ...