前言

首先,恭喜 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。

  1. 在 Azure 市场中搜索 Service Bus,然后选择创建命名空间。
  2. 名称填写你的项目或者应用名称,定价层选择“标准”或者“高级”因为基本的不支持Topic功能,然后选择要创建的位置,根据需要选择即可。如下图:

  1. 创建完成之后,在共享访问策略(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 版本中的新特性的更多相关文章

  1. Java 各个版本中的新特性

    新特性你知道多少? Java 8 Lambda 表达式 接口增加默认方法等 方法引用 流 Stream Java 9 模块系统 交互式工具jshell .of() 创建不可变集合 接口支持私有方法 更 ...

  2. Atitit js版本es5 es6新特性

    Atitit js版本es5 es6新特性 Es5( es5 其实就是adobe action script的标准化)1 es6新特性1 Es5( es5 其实就是adobe action scrip ...

  3. ASP.NET 5与MVC 6中的新特性

    差点忘了提一句,MVC 6中默认的渲染引擎Razor也将得到更新,以支持C# 6中的新语法.而Razor中的新特性还不只这一点. 在某些情况下,直接在Web页面中嵌入某些JSON数据的方式可能比向服务 ...

  4. Webpack 3 中的新特性

    本文简短地分享下最新发布的 Webpack 3 中的新特性,供大家参考. 1. Webpack 3 的新特性 6 月 20 日,Webpack 发布了最新的 3.0 版本,并在 Medium 发布了公 ...

  5. 使用示例带你提前了解 Java 9 中的新特性

    使用示例带你提前了解 Java 9 中的新特性 转载来源:https://juejin.im/post/58c5e402128fe100603cc194 英文出处:https://www.journa ...

  6. JDK各版本内容和新特性

    JDK各版本内容和新特性 - yanlzhl - 博客园 https://www.cnblogs.com/yanlzhl/articles/5694470.html    版本JDK1.0:1995年 ...

  7. (数据科学学习手札73)盘点pandas 1.0.0中的新特性

    本文对应脚本及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 毫无疑问pandas已经成为基于Pytho ...

  8. 1 PHP 5.3中的新特性

    1 PHP 5.3中的新特性 1.1 支持命名空间 (Namespace) 毫无疑问,命名空间是PHP5.3所带来的最重要的新特性. 在PHP5.3中,则只需要指定不同的命名空间即可,命名空间的分隔符 ...

  9. HTML 5中的新特性

    HTML 5中的新特性 html5新增了一些语义化更好的标签元素.首先,让我们来了解一下HTML语义化. 1.什么是HTML语义化? 根据内容的结构化(内容语义化),选择合适的标签(代码语义化)便于开 ...

随机推荐

  1. mysql各种引擎对比、实战

    1)存储引擎概述: (2)MySQL各大存储引擎: (3)InnoDB和MyIsam使用及其原理对比: (4)InnoDB和MyIsam引擎原理: (5)剩余引擎的使用DEMO(主要是Mrg_Myis ...

  2. CLR、程序集、反射和控制反转

    以前面试包括自己学习的时候经常会碰到这3个东西,也查过相关介绍,晦涩难懂,虽然看完之后,当时勉强理解,不过过一段时间又忘了.其实这篇文章可以分两篇(clr.程序集)和(反射.控制反转)来写,但它们之间 ...

  3. Javascript书籍推荐----(步步为赢)

    在此分享一些高清javascript书籍,因为我也没有全部看完,所以在这只是推荐,不同的书适合不同的人,所有的书在网上均有电子书,若找不到,请在博客留言,我有大部分书籍的电子稿.希望有更多的好书分享出 ...

  4. 自动化脚本中click()或sendKeys()没有反应

    前提: 排除xpath引用错误或元素的xpath每次都不同的情形. 问题描述 自动化脚本中click()方法和sendKeys()方法报错, 返回异常InvocationTargetException ...

  5. [论文解读]CNN网络可视化——Visualizing and Understanding Convolutional Networks

    概述 虽然CNN深度卷积网络在图像识别等领域取得的效果显著,但是目前为止人们对于CNN为什么能取得如此好的效果却无法解释,也无法提出有效的网络提升策略.利用本文的反卷积可视化方法,作者发现了AlexN ...

  6. python3:操作excel文件

    前提:自动化接口测试中,可以将用例放在excel中管理.结合实际情况讲解如何操作excel文件 1.安装xlrd:pip install xlrd 2.导入模块:import xlrd 3.打开Exc ...

  7. layer的删除询问框的使用

    删除是个很需要谨慎的操作 我们需要进行确认 对了删除一般使用ajax操作 因为如果同url请求 处理 再返回 会有空白页 1.js自带的样式 <button type="button& ...

  8. STM32基于固件库新建MDK工程模板(精简版)

    上个博文理论讲解的东西太多,太复杂,这里把所有步骤全部贴出 1.新建一个工程文件夹LED 2.LED文件夹下建立如下文件夹 3.Project –>New Uvision Project 到US ...

  9. python 防止sql注入字符串拼接的正确用法

    在使用pymysql模块时,在使用字符串拼接的注意事项错误用法1 sql='select * from where id="%d" and name="%s" ...

  10. Vue中引入bootstrap导致的CSS问题

    最近在进行vue.js+webpack进行模块化开发的时候,遇到一个奇怪的问题. 问题是这样的: 1. 在main.js文件中引入bootstrap的js和css. 2. 自己写了一个Header.v ...