CAP 3.0 版本正式发布

前言

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

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

相关文章

  • CAP的学习和应用

  • .netcore 分布式事务CAP2.6 快速入门

  • .netcore 分布式事务CAP2.6之控制台使用

  • CAP 2.6 版本发布通告

  • 10分钟了解分布式CAP、BASE理论

  • eShopOnContainers:CAP 2.5 版本中的新特性

  • CAP 2.4版本发布,支持版本隔离特性

  • asp.net core集成CAP(分布式事务总线)

原文链接:https://www.cnblogs.com/savorboard/p/cap-3-0.html


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312358.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql字符集变为gbk_MYSQL数据库默认latin1字符集转换为GBK或UTF8

可以采用下面的方法latin1字符集转换为gbk字符集或utf8字符集。具体的转换步骤如下&#xff1a;一、latin1转gbk1、导出数据库mysqldump --default-character-setlatin1 -h 数据库连接ip -u root -P 3306 -p数据库密码 db_name table_name > /usr/home/test/table_name.sql2…

微服务统计,分析,图表,监控一体化的HttpReports项目在.Net Core 中的使用

简单介绍HttpReports 是 .Net Core 下的一个Web项目, 适用于WebAPI&#xff0c;Ocelot网关应用&#xff0c;MVC项目&#xff0c;非常适合针对微服务应用使用&#xff0c;通过中间件的形式集成到您的项目中&#xff0c;可以让开发人员快速的搭建出一个 数据统计&#xff0c;分析…

查看node的位置_升级Node版本RN项目运行报错cb.apply is not a function

今日打算安装一下ReactNative官方推荐的脚手架工具Ignite。infinitered/ignite​github.comIgnite是一套整合了 Redux 以及一些常见 UI 组件的脚手架。它带有一个命令行可以生成 app、组件或是容器。在安装的过程中&#xff0c;提示当前系统安装的node版本过低&#xff0c;无法…

C++构造函数调用规则

1.拷贝函数的值拷贝&#xff1a; #include <iostream> using namespace std;//构造函数的调用规则&#xff1a; //1,创建一个类&#xff0c;C编译器会给每个类都添加至少3个函数 //默认函数(空实现)&#xff0c;析构函数(空实现)&#xff0c;拷贝函数(值拷贝)class Pers…

HTTP Strict Transport Security (HSTS) in ASP.NET Core

本文是《2020年了&#xff0c;再不会HTTPS就老了》的后篇&#xff0c;本文着重聊一聊HTTP Strict Transport Security协议的概念和应用。启用 HTTPS 还不够安全现在很多站点通过HTTPS对外提供服务&#xff0c;用户在访问某站点&#xff0c;往往会直接输入站点域名&#xff08;b…

mysql支持的平台和操作系统_MySQL 数据库所支持的操作系统_MySQL

MySQL数据库所支持的操作系统&#xff1a;我们使用GNU Autoconf&#xff0c;因此将MySQL移植到所有使用Posix线程和C编译器的现代系统是可能的。(要求服务器支持线程。如果只是编译客户端代码&#xff0c;则只需要C编译器)。我们主要在Linux(SuSE和Red Hat)、FreeBSD和Sun Sola…

C++深拷贝与浅拷贝

浅拷贝&#xff1a; 简单的赋值拷贝操作。 深拷贝&#xff1a; 在堆区重新申请空间&#xff0c;进行拷贝操作。 首先我们先写这样的一段代码&#xff1a; #include <iostream> using namespace std; //深拷贝与浅拷贝class Person {public:Person() {cout << &qu…

BeetleX轻松搭建HTTP和Weboskcet网关

在新版本的BeetleX.Bumblebee中实现了对Weboskcet代理的支持&#xff0c;因此使用BeetleX搭建同时支持HTTP和Weboskcet的网关只需要几行代码的工作就能完成&#xff1b;接下来构建一个简单的网关程序并测试一下对asp.net core SignalR进行代理的应用。引用组件使用BeetleX构建网…

[功能发布]Excel与PowerBI互通互联升级版连接SSAS和AzureAS

Excel催化剂发自内心地热爱着PowerBI社区&#xff0c;从最开始提供了PowerBIDeskTop的互通互联功能&#xff0c;到无偿奉献所有此功能的核心原代码&#xff0c;再到今天的高潮&#xff0c;献上最具商业价值的高级功能&#xff0c;让企业级商业智能BI项目插上翅膀&#xff0c;最…

window oracle 只有bak文件怎么恢复_一起来学习Oracle的备份恢复基础吧-4

基于backup controlfile的恢复使用备份的控制文件在实际工作中的两种情况&#xff1a;当前控制文件全部损坏&#xff0c;而数据文件备份、控制文件备份及当前的日志处在不同的SCN版本&#xff0c;它们之间又增加过表空间(数据文件)。当前控制文件没有损坏&#xff0c;但是想恢复…

微服务、容器和Kubernetes的2020你怎么看?

历史上&#xff0c;有些年份比其他年份容易预测。因为市场出现的稳定性使追踪趋势线变得更加容易。2020年将是企业向微服务迁移的关键一年&#xff1a;稳定并逐步地向主流应用过渡。毫无疑问&#xff0c;IT组织正在转向微服务架构。微服务将应用程序分解为许多小部分&#xff0…

C++类对象作为类成员

C类中的成员可以是另一个类的对象&#xff0c;我们称该成员为对象成员 代码如下&#xff1a; #include <iostream> using namespace std; #include <cstring>//类对象作为类成员 class Phone {public:Phone(string PName) {cout << "Phone函数的调用&…

.NET 大数据实时计算--学习笔记

摘要纯 .Net 自研大数据实时计算平台&#xff0c;在中通快递服务数百亿包裹&#xff0c;处理数据万亿计&#xff01;将分享大数据如何落地以及设计思路&#xff0c;技术重难点。目录背景介绍计算平台架构项目实战背景介绍计算平台架构分片实时计算计算平台数据统计模型开源项目…

asp.net core 实现支持多语言

asp.net core 实现支持多语言Intro最近有一个外国友人通过邮件联系我&#xff0c;想用我的活动室预约&#xff0c;但是还没支持多语言&#xff0c;基本上都是写死的中文&#xff0c;所以最近想支持一下更多语言&#xff0c;于是有了多语言方面的一些实践国际化/本地化介绍国际化…

C++this指针的用途

this指针的用途&#xff1a; 1.当形参和成员变量同名时&#xff0c;可用this指针来区分。 2.在类的非静态成员函数中返回对象本身&#xff0c;可使用return *this 每一个非静态成员函数只会诞生一份函数实例&#xff0c;也就是说多个同类型的对象会共用一块代码&#xff0c;那…

【实战 Ids4】小技巧篇:自定义登录页操作

今天的内容很简单&#xff0c;1分钟就能看完&#xff0c;5分钟就能学会&#xff0c;但是却是在我们平时开发中必须要学会的一个小知识点&#xff0c;我就不让大家走弯路了&#xff0c;直接看操作。在平时的IdentityServer4开发中呢&#xff0c;我们都是根据官方的Demo来操作一遍…

Asp.Net Core下的开源任务调度平台ScheduleMaster

从何说起2017年初的时候&#xff0c;由于当时项目需要做了一个乞丐版定时调度系统&#xff0c;那时候只在单机上实现了核心的调度功能。做这个玩意之前也调研了社区中开源的解决方案&#xff0c;找了几个实地部署试跑了一下&#xff0c;其实都很不错。但那时候我们有个问题就是…

C#录制视频

这是一个使用C#语言制作的录制框架&#xff0c;支持录制桌面&#xff0c;多屏&#xff0c;声音&#xff0c;摄像头&#xff0c;某个应用程序的界面1.安装使用此框架需要安装扩展包Kogel.Record,可以Nuget上搜索或者使用Nuget命令Install-Package Kogel.Record安装完成包后会出现…

python编程小案例_用Python3编程写第一个小案例!-Go语言中文社区

用Python3编程第一步&#xff01;今天博主跟大家聊一聊如何使用Python3编程第一步&#xff01;&#xff01;不喜勿喷&#xff0c;如有建议欢迎补充、讨论&#xff01;Come on&#xff01;在前面的几篇文章中我们已经学习了一些Python3 的基本语法知识&#xff0c;我们尝试来写一…

UnitTest in .NET(Part 5)

Photo &#xff1a;UnitTesting文 | Edison Zhou上一篇我们学习了单元测试的核心技术&#xff1a;存根、模拟对象和隔离框架&#xff0c;它们是我们进行高质量单元测试的技术基础。本篇会集中在管理和组织单元测试的技术&#xff0c;以及如何确保在真实项目中进行高质量的单元测…