console.log(|

张三Blog

园龄:3年4个月粉丝:3关注:0

初始RabbitMQ

RabbitMq 项目开源地址:https://gitee.com/zyyx2020_zhangsan/mq-test.git

1.Message Queue(MQ)

  • 消息队列(Message Queue),是一种跨进程的通信机制,用于上下游传递消息
  • MQ作为消息中间件,最主要的作用系统之间的信息传递进行"解耦",MQ是数据可靠性的重要保障
  • List item

在这里插入图片描述

2.什么是RabbitMQ

  • RabbitMQ是全世界最火的开源消息代理服务器,在全世界拥有超过35000个项目部署在RabbitMQ
  • RabbitMQ支持几乎所有的操作系统与编程语言。
  • Rabbit提供了高并发、高可用的成熟方案,支持多种消息协议,易于部署与使用。
  • 官文文档地址:https://www.rabbitmq.com/

3.RabbitMQ与其他MQ的对比

在这里插入图片描述

4. RabbitMQ的应用场景

  • 异构系统的数据传递
  • 高并发程序的流量控制
  • 基于P2P,P2PPP的程序
  • 分布式系统的事务一致性TCC
  • 高可靠性的交易系统

5. RabbitMQ使用Erlang开发

  • Erlang(['e:laen])是一种通用的面同开友的拥任后日,Erlang是一个结构化,动态类型编程语言,内建并行计算支持。
  • 使用Erlang来编写分布式应用要简单的多,Erlang运行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。

6. AMQP

  • AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有RabbitMQ等。

7.MQ的基本概念

在这里插入图片描述

  • Producer:生产者,消息的提供者
  • Consumer:消费者,消息的使用者
  • Message:消息,程序间的通信的数据
  • Queue:队列,消息存放的容器,消息先进先出
  • Vhost:虚拟主机,相当于MQ的“数据库” 用于存储队列

8.消息的状态

  • Ready
    • 消息已被送入队列等到消费
  • Unacked
    • 消息已经被消费者认领,但还未被确认已被消费
    • Unacked状态下,消费者断开连接则消息回到Ready
    • 没有确认,客户有没有断开连接,则一直处于Unacked
  • Finished
    • 调用basicAck()方法后,表示已被消费,从队列中移除

9.RabbitMQ六种工作模式

在这里插入图片描述

9.1 Work Queue 工作队列

  • 在多个消息的情况下,Work Queue 会将消息分派给不同的消费者,每个消费者都会接收到不同的消息,并且可以根据处理消息的速度来接收消息的数量,进而让消费者程序发挥最大性能
  • Work Queue特别适合在集群环境中做异步处理,能最大发挥每一台服务器的性能

9.2 发布(Publish)订阅(Subscribe)模式

  • 发布/订阅模式中,生产者不再直接与队列绑定,而是将数据发送至“交换机Exchange”
  • 交换机Exchange用于将数据按某种规则送入与之绑定的队列,进而供消费者使用
  • 发布/订阅模式中,交换机将无差别的将所有消息送入与之绑定的队列,所有消费者拿到的消息完全相同,交换机的类型被称为fanout。

9.3 路由Routing模式

  • 路由(Routing)模式是在发布订阅模式基础上的编制弄
  • 发布订阅模式是无条件将所有消息分发给所有消费者队列
  • 路由模式则是交换机根据Routing Key有条件的将数据筛选后发给消费者队列
  • 路由模式下交换机的类型被称为direct

9.4 主题Topic模式

  • 主题Topic模式是在Rounting模式基础上提供了对RouteKey模糊匹配的功能,可以简化程序的编写
  • 主题模式下,模糊匹配表达式规则为
    • *匹配单个关键字
    • #匹配所有关键字
  • 主题模式下交换机的类型被称为topic

10.RabbitMQ消息确认机制

  • RabbitMQ在传递消息的过程中充当了代理人(Broker)的角色,那生产者(Pooducer)怎样知道消息被正确投递到Broker了呢
  • RabbitMQ提供了监听器(Listener)来接收消息投递的状态。
  • 消息确认涉及两种状态:Confrim与 Return

10.1 Confirm&Return

  • Confirm代表生产者将消息送到Broker时产生的状态,后续会出现两种情况
    • ack 代表Broker已经将数据接收
    • nack 代表Broker拒收消息,原因有很多种,队列已满、限流、IO异常
  • Retuen代表消息被Broker正常接收(ack)后,但Broker没有对应的队列进行投递时产生的状态,消息被退回给生产者
  • 注意:上面两种状态只代表生产者与Broker之间消息投递的情况。与消费者是否接收/确认消息无关

11.Exchange模式

  • Exchange模式的特点是生产者与消费者之间通信需要通过交换机(Exchange)绑定队列(Queue)进行分发
  • Exchange对应Fanout、Direct、Topic三种类型
    在这里插入图片描述

本文作者:张三Blog

本文链接:https://www.cnblogs.com/zhangsan-plus/p/16503282.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   张三Blog  阅读(38)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起