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语义化? 根据内容的结构化(内容语义化),选择合适的标签(代码语义化)便于开 ...
随机推荐
- 基于Spring Cloud、JWT 的微服务权限系统设计
基于Spring Cloud.JWT 的微服务权限系统设计 https://gitee.com/log4j/pig https://github.com/kioyong/spring-cloud-de ...
- Java系列2 --- 你真的知道Java的String对象么?
在上一篇中说道这篇文章会说java的动态绑定机制,由于这个知识点放在继承中讲会比较合适,说以在这篇文章中先来详细的说说String对象吧. 只要学过Java的同学,我们都知道Java一共有8中基本 ...
- 玩转spring mvc(四)---在spring MVC中整合JPA
关于在Spring MVC中整合JPA是在我的上一篇关于spring mvc基本配置基础上进行的,所以大家先参考一下我的上一篇文章:http://blog.csdn.net/u012116457/ar ...
- 【转】jquery-easyui中datagrid的单击删除此行
最近在easyui的项目开发,easyui封装了许多方法,用起来很方便,但同时也遇到了不少的问题. 如果在datagrid中直接将index传给easyui自带的deletRow方法来删除当前点击行, ...
- 使用Eclipse远程调试
在一般的开发中,有事因为项目需要,测试环境是在Linux下,这是如果出现异常或者bug,调试起来都是很费劲的,如果你还在为这个头疼,那就好好看接下来的总结 1,启动改程序时,不论是脚本启动,还是tom ...
- 关于linux下部署JavaWeb项目,nginx负责静态资源访问,tomcat负责处理动态请求的nginx配置
1.项目的运行环境 linux版本 [root@localhost ~]# cat /proc/version Linux version -.el6.x86_64 (mockbuild@x86-.b ...
- XMR挖矿教程
XMR挖矿教程 XMR介绍 门罗币(Monero,代号XMR)是一个创建于2014年4月开源加密货币,它着重于隐私.分权和可扩展性.与自比特币衍生的许多加密货币不同,Monero基于CryptoNot ...
- Postman----打开postman console控制台,查看接口测试打印log
经常在脚本中使用变量时,你可能需要看到变量获取到的值,你可以使用Postman Console去实现的.操作步骤:应用菜单-->View--->Show Postman Console,去 ...
- MYSQL—— 完整性约束条件中primary key、auto_increment使用总结!
完整性约束条件主要有:primary key(主键), auto_increment(自增长), poreign key(外键), not null(非空), unique key(唯一), defa ...
- JAVAEE——SpringMVC第一天:介绍、入门程序、架构讲解、SpringMVC整合MyBatis、参数绑定、SpringMVC和Struts2的区别
1. 学习计划 第一天 1.SpringMVC介绍 2.入门程序 3.SpringMVC架构讲解 a) 框架结构 b) 组件说明 4.SpringMVC整合MyBatis 5.参数绑定 a) Sp ...