RabbitMq | 介绍

开发环境:

RabbitMQ是采用erlang语言开发的,所以必须有erlang环境才可以运行

大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力
消息服务中两个重要概念:

消息代理(message broker)和目的地(destination)

  • 当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。
  • 消息队列主要有两种形式的目的地
    队列(queue):点对点消息通信(point-to-point)
    主题(topic):发布(publish)/订阅(subscribe)消息通信

队列的作用:

异步处理:
在这里插入图片描述

流量削峰:

在这里插入图片描述

应用解耦:

在这里插入图片描述

rabbitMq有五种队列:

  • 点对点(简单)的队列
  • 工作(公平性)队列模式
  • 发布订阅模式
  • 路由模式Routing
  • 通配符模式Topics

规范:

JMS(Java Message Service)JAVA消息服务:
基于JVM消息代理的规范。ActiveMQ、HornetMQ是JMS实现

AMQP(Advanced Message Queuing Protocol)高级消息队列协议,也是一个消息代理的规范,兼容JMSRabbitMQ是AMQP的实现

AMQP提供了五种消息模型:
(1)、direct exchange
(2)、fanout exchange
(3)、topic change
(4)、headers exchange
(5)、system exchange
本质来讲,后四种和JMS的pub/sub模型没有太大差别,仅是在路由机制上做了更详细的划分

核心概念:

Message
消息,消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)等。

Publisher
消息的生产者,也是一个向交换器发布消息的客户端应用程序。

Exchange
交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。
Exchange有4种类型:direct(默认),fanout, topic, 和headers,不同类型的Exchange转发消息的策略有所区别

Queue
消息队列,用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。

Binding
绑定,用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。
Exchange 和Queue的绑定可以是多对多的关系。

Connection
网络连接,比如一个TCP连接。

Channel
信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内的虚拟连接,AMQP 命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因为对于操作系统来说建立和销毁 TCP 都是非常昂贵的开销,所以引入了信道的概念,以复用一条 TCP 连接。

RabbitMQ 为什么需要信道?为什么不是 TCP 直接通信?

  1. TCP 的创建和销毁开销特别大。创建需要 3 次握手,销毁需要 4 次分手。
  2. 如果不用信道,那应用程序就会以 TCP 链接 Rabbit,高峰时每秒成千上万条链接
    会造成资源巨大的浪费,而且操作系统每秒处理 TCP 链接数也是有限制的,必定造成性能
    瓶颈。
  3. 信道的原理是一条线程一条通道,多条线程多条通道同用一条 TCP 链接。一条 TCP
    链接可以容纳无限的信道,即使每秒成千上万的请求也不会成为性能的瓶颈。

Consumer
消息的消费者,表示一个从消息队列中取得消息的客户端应用程序。

Virtual Host
虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 / 。

在这里插入图片描述
Broker
表示消息队列服务器实体

模型图:

在这里插入图片描述

Exchange交换机:

Direct exchange(直连交换机)是根据消息携带的路由键(routing key)将消息投递给对应队列的

Fanout exchange(扇型交换机)将消息路由给绑定到它身上的所有队列

Topic exchange(主题交换机)队列通过路由键绑定到交换机上,然后,交换机根据消息里的路由值,将消息路由给一个或多个绑定队列

Headers exchange(头交换机)类似主题交换机,但是头交换机使用多个消息属性来代替路由键建立路由规则。通过判断消息头的值能否与指定的绑定相匹配来确立路由规则。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章