一. CAP框架简介
1. 什么是事件总线?
事件总线(EventBus)是一种机制,它允许不同的组件彼此通信而不彼此了解。 组件可以将事件发送到Eventbus,而无需知道是谁来接听或有多少其他人来接听。组件也可以侦听Eventbus上的事件,而无需知道谁发送了事件。 这样,组件可以相互通信而无需相互依赖。同样,很容易替换一个组件,只要新组件了解正在发送和接收的事件,其他组件就永远不会知道.
使用事件总线的目的:将微服务系统各组件之间进行解耦。
2. CAP框架简介
CAP 是一个在分布式系统中(SOA,MicroService)实现事件总线(EventBus)和 最终一致性(分布式事务)的一个开源的 C# 库,她具有轻量级,高性能,易使用等特点。
CAP 以 NuGet 包的形式提供,对项目无任何入侵,你仍然可以以你喜爱的方式来构建分布式系统。
CAP 具有 Event Bus 的所有功能,并且CAP提供了更加简化的方式来处理EventBus中的发布/订阅。
CAP 具有消息持久化的功能,也就是当你的服务进行重启或者宕机时,她可以保证消息的可靠性。
CAP 实现了分布式事务中的最终一致性,你不用再去处理这些琐碎的细节。
CAP 提供了基于 Microsoft DI 的 API 服务,它可以和你的 ASP.NET Core 系统进行无缝结合,并且能够和你的业务代码集成支持强一致性的事务处理。
CAP 是开源免费的.
参考:
官网地址:https://cap.dotnetcore.xyz/user-guide/zh/getting-started/quick-start/
GitHub: https://github.com/dotnetcore/CAP/tree/master/samples
官方博客:https://cap.dotnetcore.xyz/user-guide/zh/getting-started/introduction/
3. 优势
相对于直接集成消息队列,异步消息传递最强大的优势之一是可靠性,系统的一个部分中的故障不会传播,也不会导致整个系统崩溃。 在 CAP 内部会将消息进行存储,以保证消息的可靠性,并配合重试等策略以达到各个服务之间的数据最终一致性。
相对于其他的 Service Bus 或者 Event Bus, CAP 拥有自己的特色,它不要求使用者发送消息或者处理消息的时候实现或者继承任何接口,拥有非常高的灵活性。我们一直坚信约定大于配置,所以CAP使用起来非常简单,对于新手非常友好,并且拥有轻量级。CAP 采用模块化设计,具有高度的可扩展性。你有许多选项可以选择,包括消息队列,存储,序列化方式等,系统的许多元素内容可以替换为自定义实现。
4. Cap框架支持的消息队列 和 存储介质
(1).消息队列有:RabbitMQ、Kafka、Azure Service Bus、Amazon SQS、In-Memory Queue.
(2).存储介质有:In-Memory、SQLServer、MySQL、PostgreSql、MongonDB
5. Cap框架结构图
剖析:用户相关服务代码1→调用CAP框架→CAP框架把消息存储到消息队列中→消息队列主动通过CAP框架调用用户服务代码2。
整套流程涉及到4个角色:发布者、消息队列、订阅者、存储器。(PS:发布者和订阅者各自对应一个存储器,当然可以在一个DB中,发布者对应published表,订阅者对应received表,通常情况下发布者和订阅者各自是一个服务,所以各自对应一个存储器)
注:下图实线是用户代码,虚线是CAP框架内部实线,还有这里是推模式,消息队列主动调用用户服务代码(默认推模式是单线程的,所以订阅者的方法不需要考虑并发问题的;可以配置多个线程,但多个线程则无法保证消费顺序了,且订阅者方法内可能存在并发问题了。)。
PS:以上内容均参考官方文档和博客。
二. RabbitMq的安装和操作
1. 安装步骤
(1). 安装Erl运行环境
A. 去官网:https://www.erlang.org/downloads 下载,然后安装,安装过程,直接默认选项,下一步到底,安装完成即可。
PS:这里用的版本为:【23.1】,安装路径为 D:\Program Files\erl-23.1
B. 安装完成后需要配置环境变量,这里以win10的配置为例:先配置 ERLANG_HOME = D:\Program Files\erl-23.1,再把%ERLANG_HOME%\bin加到Path变量中,如下图:
C. 在命令行中输入erl,如下图,说明安装成功。
(2). 安装RabbitMQ的服务端。
A. 去官网 https://www.rabbitmq.com/download.html 进行下载,并且安装,安装过程如下图,一路下一步,直到安装完成。
PS:这里用的版本为:【3.8.9】,安装路径为 D:\Program Files\RabbitMQ Server
B. 安装完成后,查看windows服务已启动,如下图: