前言

我们很高兴宣布 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. Zabbix“专家坐诊”第183期问答汇总

    问题一 Q:老师,请问一下zabbix采集的数据怎么过滤,获取数据是nottime=20:30 notafter=3,怎么过滤出netafter=3 ?谢谢. A:过滤器设置如下图. 问题二 Q:大佬 ...

  2. 写了一个 dict.cn 的油猴脚本,目的是通过url进行搜索。这样就能配合wox进行单词的搜索了。

    写了一个 dict.cn 的油猴脚本,目的是通过url进行搜索.这样就能配合wox进行单词的搜索了. // ==UserScript== // @name dict.cn // @namespace ...

  3. 基于stm32H730的解决方案开发之点亮第一个LED灯

    一 概述 STM32H730超值系列内含ArmCortex-M7内核(具有双精度浮点单元),工作频率可达550 MHz.内嵌的128 KB闪存使意法半导体能够为开发人员提供一种经济划算的解决方案.凭借 ...

  4. labeImg 遇到闪退问题,TypeError: setValue(self, a0: int): argument 1 has unexpected type 'float'

    将python 环境安装为python3.9,然后重新安装labelImg

  5. windows下删除文件时提示“操作无法完成 因为文件已在。。。”解决方案

    解决方案:利用"资源监视器",如上图: 具体步骤: win+r,输入perfmon打开资源监视器 或者 右键--Windows 7任务栏--启动任务管理器--性能--资源监视器-- ...

  6. socket本地通信服务端

    #include <stdio.h> #include <sys/socket.h> #include <arpa/inet.h> #include <str ...

  7. 06.Android之消息机制问题

    目录介绍 6.0.0.1 谈谈消息机制Hander作用?有哪些要素?流程是怎样的? 6.0.0.2 为什么一个线程只有一个Looper.只有一个MessageQueue,可以有多个Handler? 6 ...

  8. javascript 把嵌套的 map 转成 object,再转 json 字符串

    使用 JSON.stringify 转 map 时发现并没有转成想要的 JSON 数据,搜索发现要转成 Object 才能够转成完整的 JSON, 用递归转换: const message = new ...

  9. QGIS中下载遥感影像的Python代码片段

    1. 引言 QGIS是开源免费且好用的GIS软件,并且可以使用Python脚本来控制 这里主要使用的打开QGIS时启动内置的Python解释器,这个Python解释器可以访问iface接口从而实现对Q ...

  10. Elasticsearch按照某个字段去重查询

    索引较多: index-1_t_order index-2_t_order index-32_t_order 根据pay_amount排序,order_no去重,最后分页. 说明:1.collapse ...