CAP 8.1 版本发布通告

前言

我们很高兴宣布 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,这在你想精确控制事务的场景提供更多灵活性。

cs 复制代码
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,以下是简单示例。

cs 复制代码
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

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

相关推荐
mikelv013 天前
分布式cap理论学习
分布式·cap
老肖相当外语大佬3 个月前
为了给Javaer落地DDD,我们不得不写开源组件
ddd·领域驱动设计·cap·cap4j
吱吱喔喔4 个月前
CAP+RabbitMQ
分布式·c#·rabbitmq·cap
tmax52HZ4 个月前
分布式事务-使用队列实现最终一致性
消息队列·分布式事务·cap·最终一致性·下单扣减库存
他叫阿来6 个月前
分布式架构与分布式理论
分布式·cap·base
小哈里6 个月前
【后端开发】服务开发场景之分布式(CAP,Raft,Gossip | API网关,分布式ID与锁 | RPC,Dubbo,Zookeeper)
分布式·rpc·raft·cap·gossip
fanjianglin6 个月前
第十八篇:探索非关系型数据库:从入门到实践
redis·mongodb·系统架构·nosql·neo4j·cap·cassandra
Hello-Brand6 个月前
架构与思维:4大主流分布式算法介绍(图文并茂、算法拆解)
分布式·raft·cap·分布式算法·paxos·zab
coffee_babe7 个月前
分布式与一致性协议之CAP和Paxos算法(一)
java·分布式·一致性·共识算法·cap·paxos
coffee_babe7 个月前
分布式与一致性协议之CAP(三)
java·分布式·一致性·共识算法·cap·一致性算法