首页 > 其他 > 详细

微服务架构:事件总线、CAP、RabbitMQ

时间:2020-12-13 20:24:41      阅读:93      评论:0      收藏:0      [点我收藏+]

参考:

CAP官方中文文档(重点)

RabbitMQ中文文档

RabbitMQ官网英文文档

事件总线--文档

事件总线

什么是事件总线

就是用来管理所有的事件的一种机制就称作为事件总线,包括事件发布,事件存储,事件订阅,事件处理的统称

作用

事件总线是一种机制,它允许不同的组件彼此通信而不彼此了解。 组件可以将事件发送到Eventbus,而无需知道是谁来接听或有多少其他人来接听。 组件也可以侦听Eventbus上的事件,而无需知道谁发送了事件。 这样,组件可以相互通信而无需相互依赖。 同样,很容易替换一个组件。 只要新组件了解正在发送和接收的事件,其他组件就永远不会知道

CAP框架

CAP 是一个EventBus,同时也是一个在微服务或者SOA系统中解决分布式事务问题的一个框架。它有助于创建可扩展,可靠并且易于更改的微服务系统。

CAP 支持以下几种运输方式:

存储方式分为内存和数据库

RabbitMQ

RabbitMQ是消息代理:它接受并转发消息。您可以将其视为邮局:将您要发布的邮件放在邮箱中时,可以确保Mailperson先生或女士最终将邮件传递给收件人。以此类推,RabbitMQ是一个邮箱,一个邮局和一个邮递员。

RabbitMQ与邮局之间的主要区别在于,它不处理纸张,而是接收,存储和转发数据消息的二进制斑点

专业术语

  • 队列:消息缓冲器

微服务中使用CAP框架的RabbitMQ方式

环境准备 

RabbitMQ的开发语言环境:Erlang下载地址
RabbitMQ下载地址

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

在项目中使用RabbitMQ

MicroService.Core项目安装NuGet包

  • CAP: Nuget DotNetCore.CAP
  • CAP传输器:Nuget DotNetCore.CAP.RabbitMQ
  • CAP持久化:DotNetCore.CAP.SqlServer

在 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);
        }

 

微服务架构:事件总线、CAP、RabbitMQ

原文:https://www.cnblogs.com/qingyunye/p/14129203.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!