CAP 7.2 版本发布通告
前言
今天,我们很高兴宣布 CAP 发布 7.2 版本正式版,我们在这个版本中主要致力于 Dashboard 对 k8s 服务发现的支持。
从 7.1 版本以来,我们发布了4个小版本,在这些版本中我们主要解决发现的Bug和添加一些小功能,这篇文章中可能也会提及我们在这些小版本中加的一些小功能。
下面,具体看一下我们新版本的功能吧。
总览
可能有些人还不知道 CAP 是什么,老规矩来一个简介。
CAP 是一个用来解决微服务或者分布式系统中分布式事务问题的一个开源项目解决方案(https://github.com/dotnetcore/CAP)同样可以用来作为 EventBus 使用,该项目诞生于2016年,目前在 Github 已经有超过 6000+ Star 和 90+ 贡献者,以及在 NuGet超 500 万的下载量,并在越来越多公司的和项目中得到应用。
如果你想对 CAP 更多了解,请查看我们的 官方文档。
本次在 CAP 7.2 版本中我们主要带来了以下新特性:
- 消息发布任务由.NET线程池管理
- Dashboard 添加对 Kubernetes 服务发现的支持
- Dashboard 支持自定义JWT认证登录
- Dashboard Api 支持匿名访问
- 破坏性改动
- 移除 ProducerThreadCount 配置项
- SnowflakeId 生成由静态单例更改为依赖注入单例
- 移除7.1版本事务异步方法的支持
- BUG 修复
- 修复 RabbitMQ BasicQos 配置项未按预期工作的问题
消息发布任务由.NET线程池管理
在过去,我们消息发布的Task是一条一条发送的,通过使用 ProducerThreadCount 配置项来控制同时发送的进程数来提高消息发送效率。在这个版本中,消息发布任务将由 .NET 线程池调度,同时 ProducerThreadCount 配置项被移除,这将充分利用 .NET 线程池的能力来提高发送效率。
在消息的消费侧,消费者的执行同样是线性的,在过去通过使用 UseDispatchPerGroup 配置项来让每个消费者组使用不同的队列来实现跨消费者组的并行消费。
现在消费侧同样引入了线程池,不过没有默认开启,可以通过EnableConsumerPrefetch 来启用,这样所有的消费者都将并行执行,无论是否处于相同的组,UseDispatchPerGroup将不再需要。
Dashboard 添加对 Kubernetes 服务发现的支持
在CAP的前期阶段,Kubernetes并没有被广泛使用。我们使用 Consul 进行仪表板发现,从其他节点收集数据,这大大简化了在微服务中查看不同节点数据的过程。
根据我们社区的反馈,越来越多的人使用 Kubernetes 作为他们的部署环境。所以我们在这个版本中支持 Kubernetes 作为服务发现。我们引入了一个新的NuGet包 DotNetCore.CAP.Dashboard.K8s 来实现这一点。
在引入了NuGet包后,现在有一个新的 UseK8sDiscovery 配置项用于配置服务发现,以下是一个配置示例
services.AddCap(x =>
{
// ...
x.UseDashboard();
x.UseK8sDiscovery();
});
组件将会自动检测是否处于集群内部,如果处于集群内部还需要赋予 Pod Kubernetes Api 的权限。
分配 Pod 访问 Kubernetes Api
如果你的 Deployment 关联的 ServiceAccount 没有 K8s Api 访问权限的话,则需要赋予 namespaces, services 资源的 get, list 权限。
所需配置项请参考我们的文档。 https://cap.dotnetcore.xyz/user-guide/zh/monitoring/kubernetes/#dashboard
Kubernetes 发现页和Consul发现页使用的同一个,

将 Dashboard 独立运行
如果你想将 Dashboard 作为单独的 Pod 来部署,专门负责查看集群内其他服务的话,我们提供了一个单独的扩展方法来实现这一点。
配置如下:
// 只需要这一行即可
builder.Services.AddCapDashboardStandalone();
这将使CAP Dashboard 作为一个独立的pod服务来运行,仅用作查看其他服务。
下面这个是一个Sample.Dashboard.Jwt这个示例项目,打包的一个可供测试的Docker镜像
docker pull ghcr.io/yang-xiaodong/cap-dashboard:0.2
支持自定义JWT认证登录
现在我们的 Dashboard 支持接入自定义 JWT 统一认证。
现在你可以和你自己的系统集成,使用你的自定义登录页,使用你自己的Token,来访问 Dashboard。
你可以在 Sample.Dashboard.Jwt 示例中查看更多详细。
Dashboard Api 支持匿名访问
在将 CAP Dashboard 集成到现有项目的过程中,有些项目使用了 ASP.NET Core 全局认证过滤器,由于 CAP 的 API 也是基于 ASP.NET Core 路由机制实现的,所以会被全局过滤器限制,现在我们提供了一个新的配置项以允许API匿名访问。
我们在 Dashboard 中提供了一个新的配置项 AllowAnonymousExplicit 以允许将目前的 Api 进行允许匿名访问。
破坏性改动
移除 ProducerThreadCount 配置项
正如在第一节中介绍的一样,我们的消息发送任务现在使用 .NET 线程池进行,所以 ProducerThreadCount 配置项现在已经无效被移除。
SnowflakeId 生成由静态单例更改为依赖注入单例
我们的自动生成 Published 和 Received 表主键的雪花算法现在已经由静态单例模式更改为使用依赖注入的方式进行,这允许用户自行修改实现。
services.AddSingleton<ISnowflakeId, SnowflakeId>();
受改动影响,具体 Broker 中 CustomHeaders 配置项将由 CustomHeadersBuilder 替代, CustomHeadersBuilder 配置项提供了 IServiceProvider 允许从中获得 ISnowflakeId 实例。
移除7.1版本事务异步方法的支持
在7.1版本中,我们添加了对开启事务异步方法的支持,在这个版本中,我们将其移除。 原因是由于我们的事务状态使用 AsyncLocal 存储,AsyncLocal 不支持向上传递导致事务状态丢失,所以这个版本将其移除。
BUG 修复
另外在这个版本中,我们修复了一些已知的Bug,以下是已经修复的问题列表。
- 修复 RabbitMQ BasicQos 配置项未按预期工作的问题
总结
以上,就是本版本我们做出的一些新特性和改动,感谢大家的支持,我们很开心能够帮助到大家 。
大家在使用的过程中遇到问题希望也能够积极的反馈,帮助CAP变得越来越好。
如果你喜欢这个项目,可以通过下面的连接点击 Star 给我们支持。
如果你觉得本篇文章对您有帮助的话,感谢您的【推荐】。
本文地址:http://www.cnblogs.com/savorboard/p/cap-7-2.html
作者博客:Savorboard
本文原创授权为:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
CAP 7.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 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 7.0 版本发布通告 - 支持延迟消息,性能炸了?
前言 今天,我们很高兴宣布 CAP 发布 7.0 版本正式版,我们在这个版本中带来了大批新特性以及对性能的优化和改进. 自从今年 1月份发布 6.0 版本以来,已经过去了快1年的时间.在过去的将近1年 ...
随机推荐
- java中各引用类型的生存时间
引用类型由上往下一次减弱: 强引用:Object obj=new Object(),无论什么情况下,只要强引用关系还存在,就不会回收被引用的对象. 软引用:像系统中缓存这些,在系统即将报内存溢出异常时 ...
- ChatGPT Plugin开发setup - Java(Spring Boot) Python(fastapi)
记录一下快速模板,整体很简单,如果不接auth,只需要以下: 提供一个/.well-known/ai-plugin.json接口,返回openAI所需要的格式 提供openAPI规范的文档 CORS设 ...
- 2020-06-11-ASP.NET Core Blazor 子组件父组件数据同步的问题
上一篇写数据绑定的文章,写到最后留了一个坑.当子组件绑定父组件的一个字段,并且子组件修改它的时候父组件不能实时进行同步更新UI的问题,最近终于在Blazui作者的指导下搞定了. UserInfo类要实 ...
- Docker安装Airflow
环境 系统:Ubuntu 22.04.2 LTS docker Version:20.10.21 docker-compose version 1.29.2, python3 --version Py ...
- Java 泛型:理解和应用
概述 泛型是一种将类型参数化的动态机制,使用得到的话,可以从以下的方面提升的你的程序: 安全性:使用泛型可以使代码更加安全可靠,因为泛型提供了编译时的类型检查,使得编译器能够在编译阶段捕捉到类型错误. ...
- DASCTF二进制专项部分Writeup
easynote create:堆大小可以任意分配只要不超过0xFFF create() unsigned __int64 create() { int i; // [rsp+0h] [rbp-20 ...
- 移动App测试概述:移动App特性
移动App测试概述:移动App特性 移动App在现代人的日常生活中扮演着越来越重要的角色,因而对于它们的质量和稳定性的要求也越来越高.为了确保App的质量,开发商需要进行充分的测试和检验.本文将讨论移 ...
- Kubernetes 集群管理:Kurator or Kubespray
摘要:Kubespray 和 Kurator 就是这类开源工具的典型代表.本文将对这两款工具进行比较. 本文分享自华为云社区<Kubernetes 集群管理:Kurator or Kubespr ...
- Linux目录结构及常用命令
目录 Linux目录结构... 1 Linux目录结构... 1 1. Linux常用命令... 4 1.1 Linux命令初体验... 4 1.2 文件目录操作命令... 8 1.3 拷贝移动命令. ...
- 花了一周时间,总算把mysql的加锁搞清楚了,再也不怕间隙锁和next-key了
接触mysql都知道在mysql中有很多锁,共享锁(S).排他锁(X).间隙锁(gap).next-key,当然还有意向锁.表锁等.今天不讲别的,专门来看下innodb引擎下的锁是什么样子的. 现在有 ...