参考:
就是用来管理所有的事件的一种机制就称作为事件总线,包括事件发布,事件存储,事件订阅,事件处理的统称
事件总线是一种机制,它允许不同的组件彼此通信而不彼此了解。 组件可以将事件发送到Eventbus,而无需知道是谁来接听或有多少其他人来接听。 组件也可以侦听Eventbus上的事件,而无需知道谁发送了事件。 这样,组件可以相互通信而无需相互依赖。 同样,很容易替换一个组件。 只要新组件了解正在发送和接收的事件,其他组件就永远不会知道
CAP 是一个EventBus,同时也是一个在微服务或者SOA系统中解决分布式事务问题的一个框架。它有助于创建可扩展,可靠并且易于更改的微服务系统。
CAP 支持以下几种运输方式:
存储方式分为内存和数据库
RabbitMQ是消息代理:它接受并转发消息。您可以将其视为邮局:将您要发布的邮件放在邮箱中时,可以确保Mailperson先生或女士最终将邮件传递给收件人。以此类推,RabbitMQ是一个邮箱,一个邮局和一个邮递员。
RabbitMQ与邮局之间的主要区别在于,它不处理纸张,而是接收,存储和转发数据消息的二进制斑点。
专业术语
RabbitMQ的开发语言环境:Erlang下载地址
RabbitMQ下载地址
1、在安装目录下添加可视化插件命令
rabbitmq-plugins enable rabbitmq_management
2、在安装目录sbin文件夹下启动
rabbitmq-server
3、sbin文件夹下查看rabbitmq状态,最后两行就是端口号,默认是15672
rabbitmqctl status
4、在浏览器输入http://127.0.0.1:15672
访问rabbitmq后台系统,默认账号和密码都是:guest
MicroService.Core项目安装NuGet包
在 MicroService.AggregateService服务中startup.cs中添加
// 添加事件总线cap services.AddCap(x => { // 使用内存存储消息(消息发送失败处理) x.UseInMemoryStorage(); // 使用RabbitMQ进行事件中心处理 x.UseRabbitMQ(rb => { rb.HostName = "localhost"; rb.UserName = "guest"; rb.Password = "guest"; rb.Port = 5672; rb.VirtualHost = "/"; }); });
在MicroService.AggregateService服务中AggregateController.cs中注入ICapPublisher
private readonly ICapPublisher capPublisher; public TeamsController(ICapPublisher capPublisher) { this.capPublisher = capPublisher; }
在MicroService.VideoService服务startup.cs中添加
// 添加事件总线cap services.AddCap(x => { // 使用RabbitMQ进行事件中心处理 x.UseRabbitMQ(rb => { rb.HostName = "localhost"; rb.UserName = "guest"; rb.Password = "guest"; rb.Port = 5672; rb.VirtualHost = "/"; }); });
在MicroService.VideoService服务VideoController.cs 中方法上添加特性[CapSubscribe]
// 视频添加(异步添加) [NonAction] [CapSubscribe("tontcap")] public ActionResult<Video> PostVideo(Video Video) { videoService.Create(Video); return CreatedAtAction("GetVideo", new { id = Video.Id }, Video); }
原文:https://www.cnblogs.com/qingyunye/p/14129203.html