首页 > 其他分享 >CAP 8.1 版本发布通告

CAP 8.1 版本发布通告

时间:2024-04-17 09:47:14浏览次数:29  
标签:8.1 CAP 通告 配置 支持 添加 线程 版本

前言

我们很高兴宣布 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变得越来越好。

标签:8.1,CAP,通告,配置,支持,添加,线程,版本
From: https://www.cnblogs.com/savorboard/p/18139824/cap-8-1

相关文章

  • P6864 [RC-03] 记忆 题解(评分:8.1)(2023.12.13)
    前言这下又不是官解了吧?模拟赛题,在一个月后又出现在了数据结构讲稿上,令人忍俊不禁。Solution官方解法是用线段树加矩阵,不过赛时的我显然没这么聪明,是想不到的。赛时我就只知道先发掘一些答案的性质。一、一些性质首先,发现这个撤销操作比较棘手,考虑没有撤销操作的情况下,每一......
  • POI2008UCI-The Great Escape
    dp#POI#Year2008倒着跑这个过程,发现为每次拓宽一个矩形,记录这个矩形的对角的坐标,当前的方向,可以得到\(dp_{x_1,y_1,x_2,y_2,4}\),从同方向相邻的点,或者转向后经过一条边长的点转移过来,单次转移是\(\mathcal{O}(1)\)的但是这个会\(MLE\),考虑一般的优化方法,即滚动因为统计......
  • Proxmox VE 8.1 Kernel 6.5.13-5-pve ,无法支持核显 SR-IOV 的问题
    我的之前的博客《利用显卡的SR-IOV虚拟GPU技术,实现一台电脑当七台用》介绍了ProxmoxVE7.x上启用核显虚拟化的方法。并给出了两个脚本,快速启用核显的SR-IOV。该脚本在PromoxVE7.x和8.x都做了测试。近期重新在ProxmoxVE8.1上部署,发现无法正常工作。 经过检查发现......
  • Layerscape® LS1043AXN7QQB、LS1043AXN8QQA四核64位ARM处理器,ACFJ-3439T-000E(17A)栅
    一、Layerscape®1043A处理器简介:LS1043A处理器是一款面向嵌入式网络的四核64位Arm®处理器。LS1043A可通过支持无风扇设计的灵活I/O封装,提供超过10Gbps的性能。这款SoC是专为小规格网络、工业和汽车应用而打造的解决方案,针对经济型低端PCB优化了物料成本(BOM),降低了电源成本,......
  • Element Capture API
    ElementCaptureAPIDOM(元素)节点捕获捕获并记录一个特定的HTML元素(能剪裁并去除那些遮盖和被遮盖的内容)<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-w......
  • Capl语言 CRC算法大全
    CRC网站CRC计算器(好用)CRC16-CCITTwordCRC_16_CCITT(bytedata[],bytelen){stackinti=0;stackintindex=0;wordcrc16=0x0000;while(len--){for(i=0x80;i!=0;i>>=1){if((crc16&0x8000)!=0){......
  • cap定理
    CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partitiontolerance)。CAP原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。也被称为Brewer定理,是分布式计算中的一个重要概念。它阐述了在分布式系统中,一致性(Consis......
  • :error=>"Elasticsearch Unreachable: [http://192.168.100.44:9200/][Manticore::Soc
    [2024-04-10T14:02:09,005][WARN][logstash.outputs.elasticsearch]AttemptedtoresurrectconnectiontodeadESinstance,butgotanerror.{:url=>"http://192.168.100.44:9200/",:error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool......
  • lua closure 引用值capture及栈结构
    问题对于习惯了C/C++的程序员来说,像lua/python这种动态语言总是有一些看起来新奇的特性。其中一个比较典型的例子就是闭包,尽管C++的lambda表达式隐约有了闭包的影子,但是相比较而言还是lua的闭包更强大:lua的闭包可以捕捉任意存储类型(函数参数,全局i变量,局部变量)变量,并且更重要的......
  • 2024年失业率狂飙18.1%,史上最难就业季即将来临,该如何逆袭?_2024年失业潮
    【2024年被称为最难就业年,1158万大学生面临难题】距离2024年毕业季还剩不到4个月,毕业学员将面临空前严峻的就业压力!具国家统计局的数据显示,1-2月份,16至24岁年轻人的失业率飙到18.1%,也就是说,新毕业的大学生中,平均每5个人中就有1个找不到工作。而今年的大学毕业生高达1158万......