CAP 2.5 版本中的新特性
前言
首先,恭喜 CAP 已经成为 eShopOnContainers 官方推荐的生产环境可用的 EventBus 之一。
自从上次 CAP 2.4 版本发布 以来,已经过去了几个月的时间,关注的朋友可能知道,在这几个月的时间里,也发布了几个预览版的 2.5 版本的NuGet包。
简介
可能有些人还不知道 CAP 是什么,老规矩来一个简介。
CAP 是一个用来解决微服务或者分布式系统中分布式事务问题的一个开源项目解决方案(https://github.com/dotnetcore/CAP)同样可以用来作为EventBus使用,目前已经2岁了,目前已经应用到了很多的公司和项目中,
想对 CAP 更多了解的同学可以看下官方文档。
在 CAP 2.5版本中主要带来了以下新特性:
- 支持内存存储
- 支持Azure Service Bus
- 社区支持的内存队列
下面我们就来逐一看一下这些新的特性。
支持内存存储(In-Memory Storage)
应一些用户的要求,我们在事件的存储方面,我们添加了基于内存的事件存储。因为在一些场景下对数据的一致性要求不是很高,或者说可以接受消息丢失的这种情况,但是他们想提高消息的吞吐量,所以在这个情境下,我们提供了支持内存存储的方案。
那么,内存存储有哪些优缺点呢?
优点
- 吞吐量的提高,这也意味着可以容忍消息有丢失的情况存在
- 在测试项目或者学习的过程中能够快速入门或者进行试验。
缺点
- 不对事务提供支持
因为我们需要利用数据库的ACID特性来保证数据强一致性,很显然内存存储不具备这样的特性,所以在发消息的时候就不需要接管业务的事务了,直接发就行了。
支持 Azure Service Bus
在新的 2.5版本中,我们添加了对 Azure Service Bus 的支持, Azure Service Bus 是一种完全托管的企业集成消息中间件。
Azure Service Bus 最常用于将应用程序与服务彼此解耦,是一种用于异步数据和状态传输的可靠且安全的平台。 数据通过消息在不同的应用程序和服务之间传输。 消息采用二进制格式,可能包含 JSON、XML 或纯文本。
下面说一下如果使用 Azure Service Bus 对接CAP。
- 在 Azure 市场中搜索 Service Bus,然后选择创建命名空间。
- 在名称填写你的项目或者应用名称,定价层选择“标准”或者“高级”因为基本的不支持Topic功能,然后选择要创建的位置,根据需要选择即可。如下图:

- 创建完成之后,在共享访问策略(Shared access policies)中找到主连接字符串,填到CAP的配置中即可。

下面为使用内存储存和Azure Service Bus 配合的配置示例,同样你可以在这里找到示例程序。
services.AddCap(x =>
{
x.UseInMemoryStorage();
x.UseAzureServiceBus("Endpoint=sb://testcap.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=<your-key>");
x.UseDashboard();
});
最后需要说明的是,在 Azure Service Bus 中,CAP会自动创建 Topic 而不需要人工干预,当然你可以通过配置项来自定义创建的名称。
社区支持的内存队列
在我们支持 In-Memory Storage 的过程中,有同学提出他们在跑集成测试的过程中需要使用真实的消息队列来做测试,这样非常不方便,问能不能够提供一个内存版的消息队列供测试使用。 现在,社区已经提供了相关对内存队列支持的CAP扩展项目。
项目地址:https://github.com/yang-xiaodong/Savorboard.CAP.InMemoryMessageQueue
配置方式:
services.AddCap(x =>
{
x.UseInMemoryStorage();
x.UseInMemoryMessageQueue();
});
需要注意的是,此项目仅仅用户开发环境和测试使用,请不要用于生产环境。
总结
以上,就是本版本中支持的一些新特性,感谢大家的支持,我们很开心能够帮助到大家。大家在使用的过程中遇到问题希望也能够积极的反馈,帮助CAP变得越来越好。
CAP 2.5 版本中的新特性的更多相关文章
- Java 各个版本中的新特性
新特性你知道多少? Java 8 Lambda 表达式 接口增加默认方法等 方法引用 流 Stream Java 9 模块系统 交互式工具jshell .of() 创建不可变集合 接口支持私有方法 更 ...
- Atitit js版本es5 es6新特性
Atitit js版本es5 es6新特性 Es5( es5 其实就是adobe action script的标准化)1 es6新特性1 Es5( es5 其实就是adobe action scrip ...
- ASP.NET 5与MVC 6中的新特性
差点忘了提一句,MVC 6中默认的渲染引擎Razor也将得到更新,以支持C# 6中的新语法.而Razor中的新特性还不只这一点. 在某些情况下,直接在Web页面中嵌入某些JSON数据的方式可能比向服务 ...
- Webpack 3 中的新特性
本文简短地分享下最新发布的 Webpack 3 中的新特性,供大家参考. 1. Webpack 3 的新特性 6 月 20 日,Webpack 发布了最新的 3.0 版本,并在 Medium 发布了公 ...
- 使用示例带你提前了解 Java 9 中的新特性
使用示例带你提前了解 Java 9 中的新特性 转载来源:https://juejin.im/post/58c5e402128fe100603cc194 英文出处:https://www.journa ...
- JDK各版本内容和新特性
JDK各版本内容和新特性 - yanlzhl - 博客园 https://www.cnblogs.com/yanlzhl/articles/5694470.html 版本JDK1.0:1995年 ...
- (数据科学学习手札73)盘点pandas 1.0.0中的新特性
本文对应脚本及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 毫无疑问pandas已经成为基于Pytho ...
- 1 PHP 5.3中的新特性
1 PHP 5.3中的新特性 1.1 支持命名空间 (Namespace) 毫无疑问,命名空间是PHP5.3所带来的最重要的新特性. 在PHP5.3中,则只需要指定不同的命名空间即可,命名空间的分隔符 ...
- HTML 5中的新特性
HTML 5中的新特性 html5新增了一些语义化更好的标签元素.首先,让我们来了解一下HTML语义化. 1.什么是HTML语义化? 根据内容的结构化(内容语义化),选择合适的标签(代码语义化)便于开 ...
随机推荐
- 对于Javascript 执行上下文的理解
转载无源头地址 在这篇文章中,将比较深入地阐述下执行上下文 – JavaScript中最基础也是最重要的一个概念.相信读完这篇文章后,你就会明白javascript引擎内部在执行代码以前到底做了些什么 ...
- Python Selenium 之生成Beautiful可视化报告
提到自动化测试,少不了自动化生成测试报告,更少不了漂亮的测试报告呀!刚好看到在github上有个大神分享了BeautifulReport,与unittest测试框架完美的结合起来,就能生成Beauti ...
- 玩转zookeeper命令
zkCli 是 zookeeper 原生的与 zk服务群连接的客户端的程序. 1.如何使用zkCli,sh 连接server 与参数 2.zkCli 下的增删查改指令 与 配额 quota 1.如何使 ...
- 安装VirtualBox中的增强功能包VBoxLinuxAdditions
首先,增强功能包VBoxLinuxAdditions有什么作用呢?请看: (1)实现客户机和主机间的鼠标切换. (2)与主机实现文件共享. (3)自动调整客户机分辨率. (4)与主机共享剪贴板的内容. ...
- Composer基本安装步骤
Composer是 PHP 世界里用于管理项目依赖的工具. 1,确保安装PHP,检查方法命令行窗口执行php -v,查看是否正常输出版本 php -v 2,下载安装脚本composer-setup.p ...
- JVM 线上故障排查基本操作
# 前言 对于后端程序员,特别是 Java 程序员来讲,排查线上问题是不可避免的.各种 CPU 飚高,内存溢出,频繁 GC 等等,这些都是令人头疼的问题.楼主同样也遇到过这些问题,那么,遇到这些问题该 ...
- mvc上传图片
长时间没有接触mvc,有点生疏了,这次mvc上传图片功能完成后,简单地总结下. 我围绕这三块介绍,首先是前台form表单: <style> #file_name { width: 400p ...
- CSS简写总结
CSS简写就是指将多行的CSS属性简写成一行,又称为CSS代码优化或CSS缩写.CSS 简写的最大好处就是能够显著减少CSS文件的大小,优化网站整体性能,更加容易阅读. 下面介绍常见的CSS简写规则: ...
- 跟我学ASP.NET MVC之三:完整的ASP.NET MVC程序-PartyInvites
摘要: 在这篇文章中,我将在一个例子中实际地展示MVC. 场景 假设一个朋友决定举办一个新年晚会,她邀请我创建一个用来邀请朋友参加晚会的WEB程序.她提出了四个注意的需求: 一个首页展示这个晚会 一个 ...
- switch case 支持的 6 种数据类型!
有粉丝建议可以偶尔推送一些 Java 方面的基础知识,一方面可以帮助一初学者,也可以兼顾中高级的开发者. 那么今天就讲一下 Java 中的 switch case 语句吧,有忘记的同学正好可以温习一下 ...