.NET Core 分布式事务 CAP 发布 6.1 正式版

前言

我们很高兴宣布 CAP 发布 6.1 版本正式版,在这个版本中我们主要针对目前已经发现的几个BUG进行了修复了以及添加了一些小特性。

那么,接下来我们具体看一下吧。

总览

可能有些人还不知道 CAP 是什么,老规矩来一个简介。

CAP地址:https://github.com/dotnetcore/CAP)

是一个用来解决微服务或者分布式系统中分布式事务问题的一个开源项目解决方案(https://github.com/dotnetcore/CAP)同样可以用来作为 EventBus 使用,该项目诞生于2016年,目前在 Github 已经有超过 5500+ Star 和 70+ 贡献者,以及在 NuGet超 250 万的下载量,并在越来越多公司的和项目中得到应用。

如果你想对 CAP 更多了解,请查看我们的 

官方文档:http://cap.dotnetcore.xyz/

本次在 CAP 6.1 版本中我们主要带来了以下新特性:

  • 优化雪花算法

  • Dashboard 支持自定义 Authorization Policy

  • Azure Service Bus 添加对延迟消息的支持

  • 支持配置失败消息过期删除时间

  • BUG 修复

    • 修复 Dashbaord 启用 Challenge 验证顺序问题

    • 修复 RabbitMQ 在网络抖动时偶发健康检查错误的问题

    • 修复 MySQL 8.0 重试查询时 SQL日期格式错误的问题

    • 修复 Redis Streams 读取或创建流时幂等检查的问题

优化雪花算法

在过去我们使用标准版雪花算法,会出现时钟敏感问题。

因为ID生成总是和当前操作系统的时间戳绑定的(利用了时间的单调递增性)),因此若操作系统的时钟出现回拨,生成的ID就会重复,一般不会人为地去回拨时钟,但服务器会有偶发的"时钟漂移"现象。

也就是说在多节点部署时,如果某些服务器时间不准确会导致重复键生成而导致写入消息到数据库时报错。

在本版本中,解除与操作系统时间戳的时刻绑定,生成器只在初始化时获取了系统当前的时间戳,作为初始时间戳, 但之后就不再与系统时间戳保持同步了。它之后的递增,只由序列号的递增来驱动。

比如序列号当前值是4095,下一个请求进来, 序列号+1溢出12位空间,序列号重新归零,而溢出的进位则加到时间戳上,从而让时间戳+1。

在此版本更新后,生成的Id可能会出现和之前版本出现较大差值,大家注意下就行,没啥影响。

Dashboard 支持自定义 Authorization Policy

在这个版本中,我们的Dashboard 配置项中新增了一个名为 AuthorizationPolicy 的配置项,用于想要在授权过程中使用例如基于角色的授权验证等场景。

用法如下,主要是有注释的部分。

services.AddAuthorization((options =>
{// only if you want to apply role filter to CAP Dashboard user options.AddPolicy("PolicyCap", policy => policy.RequireRole("admin.events"));
}))
.AddAuthentication(options =>
{options.DefaultScheme =  CookieAuthenticationDefaults.AuthenticationScheme;options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect(options =>
{options.Authority = "https://demo.identityserver.io/";options.ClientId = "interactive.confidential";options.ClientSecret = "secret";options.ResponseType = "code";options.UsePkce = true;options.Scope.Clear();options.Scope.Add("openid");options.Scope.Add("profile");
});services.AddCap(cap =>
{cap.UseDashboard(d =>{d.UseChallengeOnAuth = true;d.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;d.UseAuth = true;// only if you want to apply policy authorization filter to CAP Dashboard userd.AuthorizationPolicy = "PolicyCap";});// ***
}

Azure Service Bus 添加对延迟消息的支持

在 Azure Service Bus 中原生提供了对延迟发送消息的支持,也就是利用其 ScheduledEnqueueTimeUtc 属性设置。

在本版本中通过 CAP 在发送过程中指定头消息以利用此特性。

示例如下:

[HttpPost("publish")]
public async Task Publish()
{await _publisher.PublishAsync("demo-publish", string.Empty, new Dictionary<string, string?>{[AzureServiceBusHeaders.ScheduledEnqueueTimeUtc] = DateTimeOffset.UtcNow.AddSeconds(60).ToString(),});
}

顺便说一下,有一些同学之前也提起了在 RabbitMQ 中对延迟消息的支持,我们一致没有对其进行支持,一是因为需要它配置插件才可以不是原生支持,二是还是希望大家能使用调度器(Quartz,Hangfire)等来做这件事情,专业的事情交给专业的组件做。

支持配置失败消息过期删除时间

我们新增了一个配置项 FailedMessageExpiredAfter 用于配置失败的消息过期时间,到达过期时间后,消息会被删除。之前这个是写死的值 15 天,现在你可以利用此配置项进行配置。

BUG 修复

在这个版本中,我们进行了一些已发现的BUG修复,下面是修复的内容项。

  • 修复 Dashbaord 启用 Challenge 验证顺序问题。

  • 修复 RabbitMQ 在网络抖动时偶发健康检查错误的问题。

  • 修复 MySQL 8.0 重试查询时 SQL日期格式错误的问题

  • 修复 Redis Streams 读取或创建流时幂等检查的问题

总结

以上,就是本版本我们做出的一些支持和改动,感谢大家的支持,我们很开心能够帮助到大家 。

大家在使用的过程中遇到问题希望也能够积极的反馈,帮助CAP变得越来越好。

如果你喜欢这个项目,可以通过下面的连接点击 Star 给我们支持。

GitHub:https://github.com/dotnetcore/CAP/stargazers

转自:Savorboard

链接:cnblogs.com/savorboard/p/cap-6-1.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286050.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MATLAB统计分析与应用100例】案例016:matlab读取Excel数据,进行样品系统聚类分析

1. 聚类分析结果 2. matlab完整代码 (1)读取数据,并进行标准化 [X,textdata] = xlsread(examp09_02.xls); % 从Excel文件中读取数据 X = zscore(X

解决React Native报错:Error:Found unexpected optical bounds (red pixel)

问题背景 同样是在升级 gradle plugin V2.2.3 --> gradle plugin V3.0.1后&#xff0c;运行至打包APK期间报错&#xff1a; Error:found unexpected optical bounds (red pixel) on top border at x14.&#xff08;错误&#xff1a;在X14的上边框上发现意外的光学边界&am…

C语言试题五十六之计算并输出给定整数n的所有因子(不包括1与自身)之和。规定n的值不大于1000。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 请编写函数…

webpack 入门

什么是WebPack&#xff0c;为什么要使用它&#xff1f; 为什要使用WebPack 现今的很多网页其实可以看做是功能丰富的应用&#xff0c;它们拥有着复杂的JavaScript代码和一大堆依赖包。为了简化开发的复杂度&#xff0c;前端社区涌现出了很多好的实践方法 模块化&#xff0c;让我…

mysql 列类型

列类型整型 tinyint&#xff0c;smallint&#xff0c;mediumint,int,bigint (可选参数unsigned &#xff0c;&#xff08;M&#xff0c;zerofill&#xff0c;结合使用才有意义&#xff09;)浮点型 float(可选参数D,M) decimal&#xff08;可选参数D&#xff0c;M&#xff09;字…

使用vsftp虚拟用户实现安全访问控制

一、ftp连接方式 1、命令连接 ftp在与用户交互时&#xff0c;首先打开的是TCP的21号端口&#xff0c;建立命令连接&#xff0c;这个连接会始终存在&#xff0c;直到用户输入bye的那一刻&#xff0c;才断开命令连接。 2、数据连接 1&#xff09;主动连接 主动连接是基于TCP21号端…

【前端就业课 第二阶段】CSS 零基础到实战(04)定位

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我&#xff0c;若你是真心学习可以送你书籍&#xff0c;指导你学习&#xff0c;给予你目标方向的学习路线&#xff0c;无套路&#xff0c;博客为证。 一、定位 定位分为相对定位以及绝对定位。 相对定位可以理解为在 HTM…

Android TextView设置ClickableSpan 点击结尾空白位置也响应点击的问题

解决办法&#xff0c;在后边紧接着追加一个0宽度字符&#xff1a; builder.append("\u200b"); 相关知识&#xff1a; “\u200b” 为 Unicode Character ‘ZERO WIDTH SPACE’ (U200B)&#xff0c;可用于内容标识&#xff0c;不占位数&#xff08;宽度0&#xff0…

【MATLAB统计分析与应用100例】案例017:matlab读取Excel数据,进行变量系统聚类分析

1. 变量系统聚类分析结果 2. matlab完整代码 (1)读取数据,并转为距离向量 [X,textdata] = xlsread(examp09_03.xls); % 从Excel文件中读取数据 y = 1 -

WinForm 之 窗口最小化到托盘及右键图标显示菜单

日常开发有时候需要实现窗口最小化到系统托盘&#xff0c;本文就来讲讲该如何实现winfrom最小化到系统托盘&#xff0c;本例子基于VS2019编写。用C#开发winform桌面程序时&#xff0c;程序启动后&#xff0c;默认是显示在桌面而且在任务栏中有对应的图标。有的时候&#xff0c;…

C语言学习笔记--函数与指针

1. 函数类型 (1)C 语言中的函数有自己特定的类型,这个类型由返回值、参数类型和参数个数共同决定。如 int add(int i,int j)的类型为 int(int,int)。 (2)C 语言中通过 typedef 为函数类型重命名 typedef type name(parameter list);//如 typedef int f(int,int); 2. 函数指针 (…

C语言试题五十七之假定输入的字符串中只包含字母和*号。请编写函数function,它的功能是:删除字符串中所有*号。在编写函数时,不得使用c语言提供的字符串函数。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 假定输入的…

Wordpress:将图片、post等的URL转换为相对路径

2019独角兽企业重金招聘Python工程师标准>>> 例如上传一张图片&#xff0c;其地址是可能 http://127.0.0.1/wp-content/uploads/2015/12/1_.png&#xff0c; 问题是如果我们通过其他的电脑通过wordpress主机的公网IP访问这张图片时会提示找不到。 最好的处理方法是不…

MySQL数据库的优化(下)MySQL数据库的高可用架构方案

【51CTO独家特稿】如果单MySQL的优化始终还是顶不住压力时&#xff0c;这个时候我们就必须考虑MySQL的高可用架构(很多同学也爱说成是MySQL集群)了&#xff0c;目前可行的方案有&#xff1a;一、MySQL Cluster 优势&#xff1a;可用性非常高&#xff0c;性能非常好。每份数据至…

【MATLAB统计分析与应用100例】案例018:matlab读取Excel数据,进行K均值聚类分析

文章目录 1. K均值聚类分析结果2. matlab完整代码(1)读取数据,并进行标准化变换(2)选取初始凝聚点,进行聚类(3)绘制轮廓图1. K均值聚类分析结果 2. matlab完整代码 (1)读取数据,并进行标准化变换 [X, textdata] = xlsread(examp09_04.xls

C# 扩展object类 将string强制转换成int

扩展代码&#xff1a; public static class ClassExtend{/// <summary>/// 将object强制转化为int/// </summary>/// <param name"o">要强制转换的object</param>/// <param name"defaultValue">o为null或者转换失败的默认值…

Android之华为手机打开app奔溃提示java.io.FileNotFoundException: res/drawable/abc_vector_test.xml

1、问题 新建立的项目,华为手机运行起来提示如下 06-24 18:24:03.175 13314 13314 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.appsinnova.android.booming/com.appsinnova.android.picper.MainActivity}: android.content…

CSS 零基础到实战(05)布局、盒子模型、弹性盒子【前端就业课 第二阶段】

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我&#xff0c;若你是真心学习可以送你书籍&#xff0c;指导你学习&#xff0c;给予你目标方向的学习路线&#xff0c;无套路&#xff0c;博客为证。 一、流动布局 流动布局有3种布局模型&#xff0c;分别是流动布局&…

DVWA系列之24 high级别上传漏洞

最后再来分析high级别的代码&#xff1a;这里首先有一条语句需要理解&#xff1a;$uploaded_ext substr($uploaded_name, strrpos($uploaded_name, .) 1);在这条语句里&#xff0c;首先利用strrpos() 函数来查找“.”在变量$uploaded_name中出现的位置&#xff0c;然后将得到…

WPF 基础控件之 TreeView 样式

其他基础控件1.Window2.Button3.CheckBox4.ComboBox5.DataGrid 6.DatePicker7.Expander8.GroupBox9.ListBox10.ListView11.Menu12.PasswordBox13.TextBox14.RadioButton15.ToggleButton16.Slider TreeView 实现下面的效果1&#xff09;TreeView来实现动画&#xff1b;Grid 分两…