前言

大家好,我们很高兴宣布 CAP 发布了 3.0 版本正式版。

自从上次 CAP 2.6 版本发布 以来,已经过去了几个月的时间,关注的朋友可能知道,在这几个月的时间里,也发布了几个预览版的 3.0 版本的NuGet包。

3.0 是一个主要版本,在这个版本中我们对代码进行了大量重构,重构的目的是为了让代码保持清洁并且逻辑更加清晰易读,并且接口更加合理。作为一个主要版本并进行大量重构的前提下避免不了会带来一些破坏性更新,但这些都是值得的。

简介

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

CAP 是一个用来解决微服务或者分布式系统中分布式事务问题的一个开源项目解决方案(https://github.com/dotnetcore/CAP)同样可以用来作为EventBus使用,目前已经3岁了,目前已经应用到了很多的公司和项目中,

想对 CAP 更多了解的同学可以看下官方文档。

本次在 CAP 3.0 版本中我们主要带来了以下破坏性改变和新特性:

破坏性改变:

  • 消息协议和存储
  • 接口改动
  • 分离 Dashboard 项目

新特性:

  • 新的发布Api
  • 新的序列化接口
  • 全新的 Diagnostics 事件和结构
  • 新的Kafka Transport配置项
  • 其他改进

下面我们就来逐一看一下吧。

破坏性改变

本次版本我们带来了一个破坏性的改变,这导致我们的 3.0 版本是不和 2.0 版本的消息兼容的,所以大家在升级的时候注意一下。

消息协议和存储

在过去,消息是被CAP经过了一次包装然后序列化为json发送到消息队列中,并且消费端也是由CAP进行解包然后反序列化为需要的对象。这样有什么问题呢? 这会导致一是无法对消息进行自定义序列化,二会导致用户在和其他客户端发送到消息队列的消息进行对接的时候需要进行额外的适配工作。

基于以上原因,我们调整了发送和消费的数据结构和存储方式。使用更加原生的方式来实现。你发送的消息将会被直接序列化后传递到消息队列的 Body 中,元数据信息将被传递到消息队列的 Header 中。

数据库的数据结构我们在新版本并没有调整,在升级的过程中需要注意的是消息都已经被消费完成了,这样就不会读到旧的消息从而出现失败的问题。

接口改动

我们重构了一些接口,大部分情况下如果你是按照推荐的方式在使用CAP那么不会对你有影响

,如果你在升级新版本的过程遇到问题,可以参考最新代码进行调整。

分离 Dashboard 项目

在这个版本中,我们将 Dashboard 相关代码分离了出去形成了一个新的项目,如果你需要使用到 Dashbaord 相关功能,可以从 NuGet 安装它。

PM> Install-Package DotNetCore.CAP.Dashboard

新的发布Api

我们在 ICapPublisher 接口新增了一个Api 用于发送带有头信息的消息。

Task PublishAsync<T>(string name, T contentObj, IDictionary<string, string> headers);

头将被直接发送的消息队列支持的消息头进行传输,通常你可以传递和消息体相关的元数据信息在里面。

默认情况下,我们发送了 消息Id,消息名称,消息类型,发送时间 等,利用此接口你可以添加更多信息到头数据中。

在消费者这边,你可以通过 [FromCap] 标签来从 CapHeader 中读取头信息,下面展示了如何在消费者方法中读取发送的头信息。

[CapSubscribe("sample.rabbitmq.mysql")]
public void Subscriber2(DateTime p, [FromCap]CapHeader header)
{
// header["my-header"]
}

新的序列化接口

新增了 ISerializer 序列化接口,以支持对发往消息队列的消息体进行自定义序列化,你可以通过自定义实现此接口来使用你喜爱的序列化器。

默认情况下,我们使用的是 json 来对消息进行序列化,我们推荐使用此方式。因为这样你可以在 RabbitMQ Management 控制台来测试发送消息更加的方便。

全新的 Diagnostics 事件和结构

我们改进了 Diagnostics 事件和数据结构,提供对最新事件的追踪。并且我们优化了数据结构,现在可以过的更新运行时的状态信息。

我们已经针对 Skywalking 提交了 PR 已支持最新的 CAP 事件的追踪,新的追踪支持从 Controller 到消息发布,消息消费等全链路的跟踪。

新的Kafka Transport配置项

我们在 Kafka 配置项中增加了 CustomHeaders,如果你需要在消费者方法中记录当前 Kafka 消费的 Offset 或者 Partition 等信息,可以利用此扩展来添加自定义 header。

你可以在这里找到关于如何使用它。

其他改进

  • 支持重命名表名称, 参考 issue #435。
  • Bug修复,具体可以查看这里的 release 日志了解更多。
  • 依赖的 NuGet 包更新

总结

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

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

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

  1. CAP 5.0 版本发布通告

    前言 今天,我们很高兴宣布 CAP 发布 5.0 版本正式版.同时我们也很高兴的告诉你 CAP 已经有越来越多的用户并且变得越来越流行. 在 5.0 版本中,我们主要致力于更好的支持 .NET 5 以 ...

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

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

  3. CAP 3.1 版本发布通告

    前言 今天,我们很高兴宣布 CAP 发布 3.1 版本正式版.同时我们也很高兴的告诉你 CAP 在 GitHub 已经突破了 4000 Star. CAP 3000 Star 还是去年8月份的时候,最 ...

  4. CAP 5.1 版本发布通告 - 你期待的 Redis 来了

    前言 今天,我们很高兴宣布 CAP 发布 5.1 版本正式版,在这个版本里我们同样引入了更多令人激动的新特性和改进,同时也得到越来越多人的喜爱. 得益于社区的反馈和贡献者的支持,在过去的两个月里,我们 ...

  5. CAP 2.6 版本发布通告

    前言 今天,我们很高兴宣布 CAP 发布 2.6 版本正式版.同时我们也很高兴的告诉你 CAP 在 GitHub 已经突破了3000 Star. 自从上次 CAP 2.5 版本发布 以来,已经过去了几 ...

  6. CAP 5.2 版本发布通告

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

  7. CAP 6.1 版本发布通告

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

  8. CAP 6.2 版本发布通告

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

  9. Spring.Net.FrameworkV3.0 版本发布了,感谢大家的支持

    Spring.Net.FrameworkV3.0 版本发布了,感谢大家的支持. Spring.Net.Framework,基于.NET的快速信息化系统开发.整合框架,为企业或个人在.NET环境下快速开 ...

随机推荐

  1. docker + jenkins 自动化部署

    公司书架上有本docker的书籍,正好最近事不多就写个demo来玩一玩. DevOps未死,ContainerOps已到 ContainerOps VS DevOps 避免了复杂的环境,应用之间的相互 ...

  2. AtCoder Beginner Contest 075 C Bridge(割边)

    求割边个数.Tarjan的板子.. #include <bits/stdc++.h> using namespace std; const int MAXN = 55; const int ...

  3. 2018-8-10-git-使用-VisualStudio-比较分支更改

    title author date CreateTime categories git 使用 VisualStudio 比较分支更改 lindexi 2018-08-10 19:16:52 +0800 ...

  4. 神经网络入门——8XOR感知器

    XOR 感知器     XOR 感知器就是一个这样的逻辑门:输入相同返回 0 ,输入不同返回 1.与之前的感知器不同,这里并不是线性可分的.要处理这类较为复杂的问题,我们需要把感知器连接起来. 我们用 ...

  5. CodeForces 825G"Tree Queries"(选根建树)

    传送门 •参考资料 [1]:CodeForces 825G Educational Round #25 G :建树选根大法+O1大法+iostream解绑了还是慢 •题意 给定一颗包含 n 个节点的树 ...

  6. 2018-9-2-WPF-开发自动删除软件

    title author date CreateTime categories WPF 开发自动删除软件 lindexi 2018-09-02 14:51:48 +0800 2018-08-09 09 ...

  7. MVC,MVP,MVVM基本原理

    MVC,MVP,MVVM基本原理 模式与框架,其诞生就是为了解决日益复杂的事务处理 当同一问题不断出现,人们就会总结细分出相应的问题解决办法 当需求变得庞大的时候,就会出现细分,在细分的过程中就会出现 ...

  8. CF161BDiscounts

    CF161B 题目大意;要购买\(n\)件物品,有\(A\)\(B\)两种类型,要求分成\(k\)组,其中如果其中一组含有\(A\)类物品,那么这一组最便宜的一件物品就会半价 怎么分组最小化代价? 我 ...

  9. vue-learning:23 - js - leftcycle hooks

    vue 生命周期钩子函数 每一个Vue实例在创建时都需要经过一系列初始化.根据vue实例化过程中执行的逻辑,可以分为5个阶段: 初始化阶段 模板编译阶段 虚拟DOM挂载阶段 响应更新阶段 卸载阶段 这 ...

  10. 与正则有关的JS方法结合其在项目中的应用

    与正则有关的JS方法结合其在项目中的应用 前言 最近项目中用到正则匹配比较多,因此打算深入理解和总结下各个与正则有关的方法,再结合在项目中使用的情况.与正则有关的JS方法共有7个,分别是RegExp对 ...