前言

我们很高兴宣布 CAP 发布 8.1 版本正式版,我们在这个版本中主要是添加了一些新的配置项支持,并且根据用户反馈做了一些功能调整,同时在这个版本开始默认禁用了从7.2版本引入的并行发布消息。

下面,具体看一下我们新版本的功能吧。

总览

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

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

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

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

  • 新增支持 EnablePublishParallelSend 配置项
  • 允许Mongo启用事务时指定Session Handle
  • 过滤器上下文参数添加 MediumMessage
  • 异步开启事务发送消息API
  • AzureServiceBus 支持配置 Correlation header
  • PostgreSql 中使用 DataSource 配置连接
  • NATS添加新的配置项
  • 破坏性改动
    • 移除 NATS DeliverPolicy 配置项
    • 发布消息默认行为调整为串行发布

新增支持 EnablePublishParallelSend 配置项

我们在7.2版本中,添加了消息发布任务由.NET线程池管理的功能,这个特性在发送侧默认启用。由于.NET线程池中执行任务是并行执行的这并不会保证任务的执行顺序,所以这会导致一个问题就是在某些场景中用户希望串行发送保证消息以保证顺序,使用线程池的话无法保证做到这一点。

所以我们在这个版本中恢复了串行发送消息的默认行为,并提供了新的配置项 EnablePublishParallelSend 来开启并行发送消息。

BTW, 消费侧同样引入了线程池,同样没有默认开启,可以通过 EnableConsumerPrefetch 来启用,这样所有的消费者都将并行执行。

添加 Mongo 启用事务时指定 SessionHandle 扩展

在这个版本中,我们添加了一个新的重载允许使用Mongo存储在开启事务时,传递 IClientSessionHandle 参数。IClientSessionHandle 相当于关系数据库中的 DbTransaction,这在你想精确控制事务的场景提供更多灵活性。

public static IClientSessionHandle StartTransaction(this IMongoClient _,
IClientSessionHandle clientSessionHandle,
ICapPublisher publisher, bool autoCommit = false)
{
// 。。。
}

感谢 @shkarface 对此做出的贡献。

过滤器上下文参数添加 MediumMessage 允许更多可能性

我们在过滤器上下文 ConsumerContext 中,添加了新的 MediumMessage 参数对象。 MediumMessage 这个对象是CAP内部用于和数据库进行映射的对象,一般用户不需要关心。

在这个版本中,我们添加此参数的主要原因是用户可以通过此参数来对消费者执行过程进行更多控制行为,例如可以根据已完成重试来控制重试次数或者在某些情况禁用重试等。

感谢 @bschwehn 对此做出的贡献。

异步开启事务发送消息API

ICapPublisher 接口中的 Transaction 对象现在不再由 AsyncLocal<T> 进行包装,而是直接是 ICapTransaction 对象,受影响的地方为自定义事务扩展方法。只需简单的将 publisher.Transaction.Value =xxx 修改为 publisher.Transaction= xxx即可。

我们在本版本重新支持了异步开始事务的拓展方法支持 BeginTransactionAsync,以下是简单示例。

using (var connection = new MySqlConnection(ConnectionString))
{
using var transaction = await connection.BeginTransactionAsync(_capBus, true);
await connection.ExecuteAsync("insert into test(name) values('test')", transaction: (IDbTransaction)transaction.DbTransaction);
await _capBus.PublishAsync("sample.rabbitmq.mysql", DateTime.Now);
}

Azure ServiceBus 支持配置 correlation header

我们为AzureServiceBus添加了新的支持选项 DefaultCorrelationHeaders,该配置项允许用户设置 correlation过滤器,你可以在这里查看详细信息

感谢 @demorgi 对此做出的贡献。

PostgreSql 中使用新的 NpgsqlDataSource 配置项以支持动态密码

由于在Postgres中直接使用 Connection 连接字符串不支持设置动态密码,在一些情况下为了安全需要定期更新密码,所以为了支持这个功能,我们支持了使用

来配置数据库连接,来支持动态更新密码。

同时使用 NpgsqlDataSource 来配置数据库连接也是 NpgSql 8.0 版本后的推荐做法。

感谢 @jonekdahl 对此做出的贡献。

NATS 添加新的配置项

我们为 NATS 提供了新的配置项允许更加精细的控制在创建 Consumer 连接时候的选项,下面的新增的2个配置项。

StreamOptions 用于创建 Stream 时指定的设置项, Stream相当于是消息的存储介质,你可能在创建的时候设置持续时间、大小、副本等,你可能在这里查看更多可能的配置项。

ConsumerOptions 用于指定消费者创建时的相关参数,你可以在这里查看更多可能的配置项。

破坏性改动

移除 NATS DeliverPolicy 配置项

由于 NATS 添加了新的配置项,所以原本归属于 ConsumerOptions中的配置项已经被移除。你可以通过ConsumerOptions来设置。

发布消息默认行为调整为串行发布

从 7.2 版开始,为了提高发布方面的性能,我们让 .NET 线程池负责处理消息发布。不过,由于线程池中的任务不能保证按顺序执行,而且确保线性发布在某些用例中很有意义,因此我们将从本版本开始恢复线性发布。

同时,我们还引入了一个新选项 EnablePublishParallelSend,允许用户启用并行消息发送功能。

总结

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

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

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

如果你觉得本篇文章对您有帮助的话,感谢您的【推荐】。


本文地址:http://www.cnblogs.com/savorboard/p/cap-8-1.html

作者博客:Savorboard

本文原创授权为:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本

CAP 8.1 版本发布通告的更多相关文章

  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 5.2 版本发布通告

    前言 今天,我们很高兴宣布 CAP 发布 5.2 版本正式版,在这个版本中,我们主要致力于更好的优化使用体验以及支持新的 Transport,同时在该版本也进行了一些 bug 修复的工作. 自从 5. ...

  7. CAP 6.0 版本发布通告 - 支持 OpenTelemetry

    前言 今天,我们很高兴宣布 CAP 发布 6.0 版本正式版,在这个版本中,我们主要致力于对 OpenTelemetry 提供支持,以及更好的适配 .NET 6. 那么,接下来我们具体看一下吧. 总览 ...

  8. CAP 6.1 版本发布通告

    前言 今天,我们很高兴宣布 CAP 发布 6.1 版本正式版,在这个版本中我们主要针对目前已经发现的几个BUG进行了修复了以及添加了一些小特性. 那么,接下来我们具体看一下吧. 总览 可能有些人还不知 ...

  9. CAP 6.2 版本发布通告

    前言 今天,我们很高兴宣布 CAP 发布 6.2 版本正式版,在这个版本中我们主要做了一些功能优化,以及针对目前已经发现的几个 BUG 进行了修复了. 那么,接下来我们具体看一下吧. 总览 可能有些人 ...

  10. CAP 7.0 版本发布通告 - 支持延迟消息,性能炸了?

    前言 今天,我们很高兴宣布 CAP 发布 7.0 版本正式版,我们在这个版本中带来了大批新特性以及对性能的优化和改进. 自从今年 1月份发布 6.0 版本以来,已经过去了快1年的时间.在过去的将近1年 ...

随机推荐

  1. python Ai 应用开发基础训练,字符串,字典,文件

    --------------------------------------    编程能是大模型应用的天花板............................................. ...

  2. XAF Blazor FilterPanel

    前言 XAF列表视图(ListView)中的过滤(Filter),可以在ListView模型的Filters节点中添加,添加的过滤项(FilterItem)会在列表视图的工具栏中以下拉列表的形式显示, ...

  3. 使用fastJson中的JSONObject对象简化POST请求传参-2022新项目

    一.业务场景 Java项目开发中,经常会用到远程调用,不管是POST请求,Feign远程调用,还是使用Resttemplate中的POST方法等等都需要传递参数. 可是如何更好的传递参数呢?之前自己开 ...

  4. maven打包出现 ����applets.user.service.UserService����-2022新项目

    一.问题由来 新项目的框架刚搭建好,还不能正常的运行,我们这边就开始写代码,因为项目还在设计阶段,很多东西比如说需求 都还在讨论之中.分层架构采用的是cola4.0的架构,具体的代码由我们自己来进行实 ...

  5. Spring Boot中的Freemarker模版引擎引用css和js的正确姿势

    最近在弄个软件更新Web管理系统,项目中引用了js和css等样式,但发现iframe中无法成功引入样式,稍微研究之后成功的发现的解决方法,以及spring boot项目中正确引用css和js的正确姿势 ...

  6. api-ms-win-crt-***.dll, api-ms-win-core-***.dll,win7以后kernel.dll,msvc*.dll的改变。api-ms-win-crt-***.dll 有问题就是 c++ redist 版本过低。

    api-ms-win-crt-***-|1-1-0.dll是redistributable c++的一部分.以往只会因为msvc*NNN.dll才要去找对应的redistributable c++版本 ...

  7. iOS端创建ReactNative容器第一步:打出jsbundle和资源包

    react-native的打包流程是通过执行react-native bundle指令进行的.   添加构建指令 修改RN项目中的package.json文件,先其中添加构建命令build-relea ...

  8. 【Leetcode】120. 三角形最小路径和

    题目(链接) 给定一个三角形triangle ,找出自顶向下的最小路径和. 每一步只能移动到下一行中相邻的结点上.相邻的结点在这里指的是下标与上一层结点下标相同或者等于上一层结点下标 + 1的两个结点 ...

  9. 记录--有关uni-app如何实现路由拦截的知识分享

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 随着业务的需求,项目需要支持H5.各类小程序以及IOS和Android,这就需要涉及到跨端技术,不然每一端都开发一套,人力成本和维护 ...

  10. PDF的分割与合并

    1.进行PDF切割 python代码如下: # 20220521 # 1.选择要分割的文件 # 2.选择要保存的位置,分割为多个文件时,可自动用页码命名 # 3.输入要分割的页码,可以是一个范围1-2 ...