【咱们一起来学 RabbitMQ 一 】RabbitMQ 的根本介绍

嗨,大家好,我是小魔童哪吒,咱们从明天开始进入开源组件的学习,一边学习一边总结一边分享

文章提纲如下:

  • RabbitMQ 简略介绍及应用
  • RabbitMQ 的六种工作模式

本次文章不波及编码,编码咱们对立放在下一次

RabbitMQ 简略介绍

RabbitMQ 是一套开源(MPL)的音讯队列服务软件,是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、强壮以及可伸缩性闻名的 Erlang 写成。

AMQP 是什么?

高级音讯队列协定,它使得听从该标准的客户端利用和消息中间件服务器的全功能互操作成为可能

客户端利用能够通过这个协定与音讯代理和它实现的 AMQP 模型进行交互通信

MQ 是什么?

全称 Message Queue , 即音讯总线

是一种跨过程、异步的通信机制

用于上下游传递音讯,由音讯零碎来确保音讯的牢靠传递。

RabbitMQ 个别应用在什么场景?

  • 错峰流控
  • 保证数据的最终一致性
  • 上下游逻辑解耦
  • 具体的应用场景与上面说到的 RabbitMQ 的六种工作模式非亲非故

RabbitMQ 组件中都蕴含了啥?

  • 消费者

能够订阅某个队列

  • 生产者

创立音讯,而后公布到队列中(queue),最终将音讯发送到监听的消费者

  • Broker:

一个实体,用于标识音讯队列服务器

  • Virtual Host

虚拟主机

标识一批交换机、音讯队列和相干对象

虚拟主机是共享雷同的身份认证和加密环境的独立服务器域

每个vhost实质上就是一个mini版的RabbitMQ服务器,领有本人的队列、交换器、绑定和权限机制

  • Exchange

交换器,用来接管生产者发送的音讯并将这些音讯路由给服务器中的队列

  • Queue

音讯队列,用来保留音讯直到发送给消费者

它是音讯的容器,也是音讯的起点

一个音讯可投入一个或多个队列

音讯始终在队列外面,期待消费者连贯到这个队列并将它取走

  • Banding

绑定,用于音讯队列和交换机之间的关联

一个绑定就是基于路由键将交换机和音讯队列连接起来的路由规定,所以能够将交换器了解成一个由绑定形成的路由表

  • Channel

信道,多路复用连贯中的一条独立的双向数据流通道

信道是建设在实在的TCP连贯边疆虚构链接,AMQP命令都是通过新到收回去的,不论是公布音讯、订阅队列还是接管音讯,这些动作都是通过信道实现的,为了复用一条TCP连贯

  • Connection

网络连接,例如一个TCP连贯,能够有多个

  • Publisher

音讯的生产者

也是一个向交换器公布音讯的客户端应用程序

  • Consumer

音讯的消费者

示意从一个音讯队列中获得音讯的客户端应用程序

  • Message

音讯,它是由音讯头和音讯体组成

音讯体是不通明的,而音讯头则是由一系列的可选属性组成

这些属性包含如下参数

  • routing-key (路由键)
  • priority (优先级)
  • delivery-mode (音讯可能须要持久性存储[音讯的路由模式])

市面上都有哪些 MQ ?

  • RabbitMQ
  • Kafka
  • ActiveMQ
  • ZeroMQ
  • RocketMQ

那么咱们为啥抉择 RabbitMQ ?

咱们来看看 RabbitMQ 的特点

  • 可靠性

RabbitMQ 应用了 长久化、传输确认、公布确认 等 机制来保障可靠性

  • 灵便的路由

在音讯进入队列之前,通过Exchange来路由音讯

对于典型的路由性能,RabbitMQ 曾经提供了一些内置的Exchange来实现

对于简单的路由性能,RabbitMQ 能够将多个Exchange绑定在一起,也通过插件机制实现本人的Exchange

  • 音讯集群

多个 RabbitMQ 服务器能够组成一个集群,造成一个逻辑 Broker

  • 高可用

RabbitMQ 队列能够在集群中的机器上进行镜像,使得在局部节点出问题的状况下队列依然可用

  • 多种语言客户端

简直反对所有罕用语言,比方Java、.NET、Ruby、GO

  • 治理界面

提供了易用的用户界面,使得用户能够监控和治理音讯 Broker

  • 跟踪机制

如果音讯异样,RabbitMQ 提供了音讯的跟踪机制,使用者能够找出具体产生了什么

  • 插件机制

提供了许多插件,来从多方面进行扩大,也能够编辑本人的插件

RabbitMQ 的六种工作模式

图片来源于 RabbitMQ 官网文档 https://www.rabbitmq.com/gets...

simple 简略模式

简略的音讯生产者和简略的消费者的关系,生产者生产音讯,放到队列中,生产中生产队列中的音讯

  • 音讯产生者将音讯放入队列
  • 音讯的消费者监听音讯队列,如果队列中有音讯就生产掉

音讯被拿走后,主动从队列中删除

work 工作模式

多个生产端生产同一个队列中的音讯,队列采纳轮询的形式将音讯是均匀发送给消费者,此处的资源是竞争关系

  • 音讯产生者将音讯放入队列,这里的消费者能够有多个

消费者C1,消费者C2,同时监听同一个队列

音讯被消费者C1,C2独特争抢以后的音讯队列内容,谁先拿到谁负责生产音讯

这里就会有这样的问题,同一个音讯会被不同的消费者都生产掉,咱们须要解决这种问题

能够设置一个开关,syncronize,保障一条音讯只能被一个消费者应用

  • 用于场景

    • 红包场景
    • 大型项目中的资源调度

publish/subscribe 公布订阅模式

publish/subscribe 公布订阅模式 , 绝对于Work queues模式多了一个交换机,此处的资源是共享的

生产端先把音讯发送到交换机,再由交换机把音讯发送到绑定的队列中,每个绑定的队列都能收到由生产端发送的音讯

  • X 代表交换机 RabbitMQ 外部组件,每个消费者监听本人的队列
  • 生产者将音讯发给broker,由交换机将音讯转发到绑定此交换机的每个队列,每个绑定交换机的队列都将接管
    到音讯
  • 用于场景

    • 邮件群发
    • 群聊天
    • 播送(广告等)

routing 路由模式

  • 每个消费者监听本人的队列,并且设置带统配符的 routingkey
  • 生产者将音讯发给broker,由交换机依据 routingkey 来转发音讯到指定的队列

大抵波及的流程如下:

生产者解决流程:

申明队列并申明交换机 -> 创立连贯 -> 创立通道 -> 通道申明交换机 -> 通道申明队列 -> 通过通道使队列绑定到交换机并指定该队列的routingkey(通配符) -> 制订音讯 -> 发送音讯并指定routingkey(通配符)

消费者解决流程:

申明队列并申明交换机 -> 创立连贯 -> 创立通道 -> 通道申明交换机 -> 通道申明队列 -> 通过通道使队列绑定到交换机并指定routingkey(通配符) -> 重写音讯生产办法 -> 执行音讯办法

Topics 模式实际上是路由模式的一种

他俩的最大的区别是 : Topics 模式发送音讯和生产音讯的时候是通过通配符去进行匹配的

通配符有如下留神点:

  • */#星号或者井号代表通配符
  • 星号代表多个单词,而井号代表一个单词
  • 路由性能增加含糊匹配
  • 音讯生产者生产音讯,把音讯交给交换机 exchange
  • 交换机 exchange 依据 key 的规定含糊匹配到对应的队列,由队列的监听消费者接管音讯生产

RPC 模式

RPC 近程过程调用,客户端近程调用服务端的办法 ,应用 MQ 能够实现 RPC 的异步调用

这是基于Direct交换机实现的,流程如下:

  • 客户端即是生产者也是消费者,向 RPC 申请队列发送 RPC 调用音讯,同时监听RPC响应队列
  • 服务端监听RPC申请队列的音讯,收到音讯后执行服务端的办法,失去办法返回的后果
  • 服务端将RPC办法 的后果发送到RPC响应队列。
  • 客户端监听RPC响应队列,接管到RPC调用后果

总结

  • RabbitMQ是一套开源(MPL)的音讯队列服务软件
  • RabbitMQ 组件中都蕴含如下局部

    • 生产者
    • 消费者
    • broker 实体
    • virtual host 虚拟机
    • exhcnage 交换机
    • binding 绑定关系
    • queue 队列
    • connection 连贯
    • channel 信道
    • message 音讯
  • 抉择 RabbitMQ 的起因有哪些
  • RabbitMQ 的六种工作模式:

    • simple 简略模式
    • work 工作模式
    • publish/subscribe 订阅公布模式
    • routing 路由模式
    • RPC 模式

参考资料:

RabbitMQ Tutorials

欢送点赞,关注,珍藏

敌人们,你的反对和激励,是我保持分享,提高质量的能源

好了,本次就到这里

技术是凋谢的,咱们的心态,更应是凋谢的。拥抱变动,背阴而生,致力向前行。

我是小魔童哪吒,欢送点赞关注珍藏,下次见~