前言

首先,恭喜 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. iPhone越狱

    手机越狱 常用工具:PP越狱助手.盘古越狱.iTunes 如果手机第一次越狱使用pp越狱助手成功率比较高 iPhone固件下载地址http://iphone.91.com/fw/iphone5/ 具体 ...

  2. 第四章——训练模型(Training Models)

    前几章在不知道原理的情况下,已经学会使用了多个机器学习模型机器算法.Scikit-Learn很方便,以至于隐藏了太多的实现细节. 知其然知其所以然是必要的,这有利于快速选择合适的模型.正确的训练算法. ...

  3. JavaWeb(一)JavaWeb应用的概念

    JavaWeb应用的概念 在Sun的Java Servlet规范中,对Java Web应用作了这样定义:"Java Web应用由一组Servlet.HTML页.类.以及其它可以被绑定的资源构 ...

  4. Javascript 中的map/reduce

    先填个坑,后面慢慢填 附上一篇不错的文章:https://segmentfault.com/a/1190000008719824

  5. yii2.0 路由美化以及自定义设置

    在配置文件里修改: 如果把'enablePrettyUrl' => true,设为true那么你的gii就访问不到: 'rules' => [                 '<c ...

  6. Hibernate中cascade作用

    Hibernate中cascade作用 只有“关系标记”才有cascade属性: 一个操作因级联cascade可能触发多个关联操作.前一个操作叫“主控操作”,后一个操作叫“关联操作”. cascade ...

  7. Python 枚举

    1. 枚举的定义 首先,定义枚举要导入enum模块.枚举定义用class关键字,继承Enum类.用于定义枚举的class和定义类的class是有区别. 示例代码: from enum import E ...

  8. tesseract-ocr识别英文和中文图片文字以及扫描图片实例讲解

    本文来源:http://blog.csdn.net/wanghui2008123/article/details/37694307 本文参考http://blog.sina.com.cn/s/blog ...

  9. client.go

    package)*time.Second) ], {         hasConn := false         waitc := time.After(cfg.DialTimeout)     ...

  10. Semaphore简介

    Semaphore简介 Semaphore是并发包中提供的用于控制某资源同时被访问的个数 操作系统的信号量是个很重要的概念,在进程控制方面都有应用.Java 并发库 的Semaphore 可以很轻松完 ...