RabbitMQ-概念了解

一、MQ基本概念

1、MQ(message queue)

        从字面意思上看,本质是个队列, FIFO先入先出,只不过队列中存放的内容是message,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种常见的上下游“逻辑理解+物理解耦”的消息通信服务。使用了MQ之后,消息发送上游只需要依赖MQ,不用依赖其他服务。

2、作用

  • 流量消峰

        如果一个系统单位时间内能处理1万次请求,那么请求一般情况下会很快返回结果。但在请求高峰期,单位时间内有2万次请求,就只能对请求进行丢弃或者不让请求。使用消息队列做缓冲,就能取消限制,把所有请求分散时间处理,把所有请求都接收,进行排队挨个处理。

  • 应用解耦       

        一个有很多子系统组成的大系统,但是一个流程需要所有子系统挨个处理。如果其中一个子系统出现问题,那么就会造成这次流程失败。使用消息队列的方式后,当流程遇到出问题的子系统时,流程指令会暂存在消息队列中,待子系统修复后会继续处理流程指令,就不会出现直接失败的情况。

  • 异步处理

        A调用B,B需要花费很长时间执行,但是A需要知道B何时执行完成,一般的方式有两种:A调用B的查询API查询;A提供一个callback API,在B执行完成后通知A。加入消息队列后,可以使用消息总线解决此类问题,A调用B后只需要监听B处理完成的消息,当B处理完成后,MQ会将B处理完成的消息转发给A。

3、分类

ActiveMQ、Kafka、RocketMQ、RabbitMQ

二、RabbitMQ

1、概念       

        作用:接收并转发消息。实现了高级消息队列协议(AMQP)的开源代理软件。使用Erlang语言编写。

2、四大核心

  • 生产者:产生数据发送消息的程序是生产者
  • 交换机:交换机是RabbitMQ非常重要的一个部件,一方面它来接收来自生产者的消息,另一方面它将消息推送到队列中。交换机必须确切的知道它接收到的消息,是将这些消息推送到特定队列还是推送到多个队列,或者丢弃消息。
  • 队列:队列是RabbitMQ内部使用的一种数据结构。它受主机内存和磁盘的限制,本质上是一个大的消息缓冲区。许多生产者可以将消息发送到一个队列,许多消费者可以尝试从一个队列接收数据。
  • 消费者:消费者与接收具有相似的含义。消费者大多时候是一个等待接收消息的程序。生产者、消费者和中间件很多时候不在同一台机器上。同一个程序既可以是生产者也可以是消费者。

3、核心部分(6大模式)

  • simple简单模式

        P生产消息放入队列,C消费消息。

        使用场景:聊天

  • work工作模式(资源竞争)

        P生产消息放入队列,两个消费者争抢队列中的消息,谁抢到谁消费。

        使用场景:抢红包

  • publish/subscribe发布订阅(共享资源)

         消息产生者将消息放入交换机,交换机发布订阅把消息发送到所有消息队列中,对应消息队列的消费者拿到消息进行消费。

        使用场景:广播、群发邮件

  • routing路由模式

        消息生产者将消息发送给交换机按照路由判断,路由是字符串(info) 当前产生的消息携带路由字符(对象的方法),交换机根据路由的key,只能匹配上路由key对应的消息队列,对应的消费者才能消费消息;

  • topic主题模式

         交换机根据key的规则模糊匹配到对应的队列,由队列的监听消费者接收消息消费

  • RPC

RPC即客户端远程调用服务端的方法 ,使用MQ可以实现RPC的异步调用,基于Direct交换机实现,流程如下:

1、客户端即是生产者就是消费者,向RPC请求队列发送RPC调用消息,同时监听RPC响应队列。

2、服务端监听RPC请求队列的消息,收到消息后执行服务端的方法,得到方法返回的结果

3、服务端将RPC方法 的结果发送到RPC响应队列

4、客户端(RPC调用方)监听RPC响应队列,接收到RPC调用结果。


借鉴地址:RabbitMQ的6种工作模式详解_自律成就自由的博客-CSDN博客_rabbitmq模式

                   RabbitMQ的六种工作模式 - DarJeely - 博客园

4、原理

  • Channel:信道。多路复用连接中的一条独立双向数据流通道。信道是建立在真实TCP内的虚拟连接,复用TCP连接的通道。
  • Producer:消息生产者。向消息队列发布消息的客户端程序。
  • Consumer:消息消费者。从消息队列取得消息的客户端程序。
  • Message:消息。消息由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(消息优先权)、delivery-mode(是否持久性存储)等。
  • Routing Key:路由键。消息头的一个属性,用于标记消息的路由规则,决定了交换机的转发路径。最大长度255 字节。
  • Queue:消息队列。存储消息的一种数据结构,用来保存消息,直到消息发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将消息取走。需要注意,当多个消费者订阅同一个Queue,这时Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理,每一条消息只能被一个订阅者接收。
  • Exchange:交换机。提供Producer到Queue之间的匹配,接收生产者发送的消息并将这些消息按照路由规则转发到消息队列。交换器用于转发消息,它不会存储消息 ,如果没有 Queue绑定到 Exchange 的话,它会直接丢弃掉 Producer 发送过来的消息。
  • Binding:绑定。用于建立Exchange和Queue之间的关联。一个绑定就是基于Binding Key将Exchange和Queue连接起来的路由规则,所以可以将交换器理解成一个由Binding构成的路由表
  • Binding Key:绑定键。Exchange与Queue的绑定关系,用于匹配Routing Key。最大长度255 字节
  • Broker:RabbitMQ Server,服务器实体。

借鉴地址:RabbitMQ原理详解_一条特立独行的狗、的博客-CSDN博客_rabbitmq原

5、用户创建(Linux)

创建账号:rabbitmqctl add_user admin 123

设置用户角色:rabbitmqctl set_user_tags admin administrator

设置用户权限:set_permissions [-p <vhostpath>] <user> <conf> <write> <read>

                例子:rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

                用户admin具有virtual host中所有资源的配置、写、读权限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值