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年 ...
随机推荐
- 通过空间占用和执行计划了解SQL Server的行存储索引
1 索引介绍 索引是一种帮助查询语句能够快速定位到数据的一种技术.索引的存储方式有行存储索引.列存储索引和内存优化三种存储方式: 行存储索引,使用B+树结构,行存储指的是数据存储格式为堆.聚集索引和内 ...
- 2021-04-27:如果一个字符相邻的位置没有相同字符,那么这个位置的字符出现不能被消掉。比如:“ab“,其中a和b都不能被消掉 。如果一个字符相邻的位置有相同字符,就可以一起消掉。比如:“abbb
2021-04-27:如果一个字符相邻的位置没有相同字符,那么这个位置的字符出现不能被消掉.比如:"ab",其中a和b都不能被消掉 .如果一个字符相邻的位置有相同字符,就可以一起消 ...
- Redis实战解读-初识Redis&Redis基本数据类型
Redis实战解读 一.初识Redis 1.什么是Redis Redis是一个速度非常快的非关系型数据库(non-relational database),它可以存储键(key)与五种不同类型的值 ...
- Structured Streaming 的异常处理 【Concurrent update to the log. Multiple streaming jobs detected】
目录 异常信息 一.异常表象原因 1.异常源码: 2.打个断点 二.解决方案 1.可以通过代码指定各分区的开始offset 2.不删除而是更改checkpoint offset下的批次文件 三.异常背 ...
- 【Java】GridBagLayout布局笔记
参考博客: 样例解释:https://blog.csdn.net/wstz_5461/article/details/78067176 参数解释:https://blog.csdn.net/shiSh ...
- 如何使用 Blazor 框架在前端浏览器中导入和导出 Excel
前言 Blazor 是一个相对较新的框架,用于构建具有 .NET 强大功能的交互式客户端 Web UI.一个常见的用例是将现有的 Excel 文件导入 Blazor 应用程序,将电子表格数据呈现给用户 ...
- SpringMVC 简单的开始
SpringMVC简单的开始 利用Spring模板配置写一个web项目. 1.核心配置文件(模板代码) <?xml version="1.0" encoding=" ...
- rest --framework 源码学习第一天 view 类
首先view类:源码分析
- Flutter调优--深入探究MediaQuery引起界面Rebuild的原因及解决办法
前言 我们可以通过MediaQuery.of(context)方法获取到一些设备和系统的相关信息,比如状态栏的高度.当前是否是黑暗模式等等,使用起来相当方便,但是也要注意可能引起的页面rebuild问 ...
- Java并发(九)----线程join、interrupt
1.join 方法详解 1.1 为什么需要 join? 下面的代码执行,打印 r 是什么? static int r = 0; public static void main(String[] arg ...