RabbitMQ是开源的消息代理和队列服务器,用来通过不同协议在不同的应用之间数据共享。RabbitMq是基于AMQP协议的,

服务器节点出传输和复制 是非常优秀的!
性能优秀 、 稳定性保障

与SpringAMQP 完美整合

提供集群模式、表达式配置,镜像队列模型

镜像队列模型:保证数据不丢失的前提可做到高可靠、可用性简介和AMQP - 图1
生产者 —> 虚拟主机 —>交换机 —> 消息队列
交换机和消息队列 之间的 关系 是绑定 关系 通过路由规则实现查找!

消费者 —> 消息队列 消费者只需要关注消息队列就ok

简介和AMQP - 图2


简介和AMQP - 图3

比较重要的概念有 4 个,分别为:虚拟主机,交换机,队列,和绑定。

  • 虚拟主机:一个虚拟主机持有一组交换机、队列和绑定。为什么需要多个虚拟主机呢?很简单,RabbitMQ当中,用户只能在虚拟主机的粒度进行权限控制。 因此,如果需要禁止A组访问B组的交换机/队列/绑定,必须为A和B分别创建一个虚拟主机。每一个RabbitMQ服务器都有一个默认的虚拟主机“/”。

  • 交换机:Exchange 用于转发消息,但是它不会做存储 ,如果没有 Queue bind 到 Exchange 的话,它会直接丢弃掉 Producer 发送过来的消息。 这里有一个比较重要的概念:路由键 。消息到交换机的时候,交互机会转发到对应的队列中,那么究竟转发到哪个队列,就要根据该路由键。

  • 绑定:也就是交换机需要和队列相绑定,是多对多的关系。

四种模式

  • Direct:direct 类型的行为是”先匹配, 再投送”. 即在绑定时设定一个 routing_key, 消息的routing_key 匹配时, 才会被交换器投送到绑定的队列中去

(我们可以在 X 和 Q1 之间添加绑定键 black。、
在这种情况下,direct 类型的交换器将消息广播到所有匹配的队列 Q1 和 Q2。注意,这个路由键必须完全匹配才能投递.)

  • Topic:按规则转发消息(类似于直连模式,最灵活可用特殊符号 匹配多个)

  • Headers:设置header attribute参数类型的交换机

  • Fanout:将消息路由给绑定到它身上的所有队列,而不理会绑定的路由键。如果N个队列绑定到某个扇型交换机上,当有消息发送给此扇型交换机时,交换机会将消息的拷贝分别发送给这所有的N个队列。扇型用来交换机处理消息的广播路由(broadcast routing)

Default Exchange

The default exchange is a direct exchange with no name (empty string) pre-declared by the broker. It has one special property that makes it very useful for simple applications: every queue that is created is automatically bound to it with a routing key which is the same as the queue name.

这个默认的交换机是一个直连交换机,默认跟随着一个名称是空字符串,通过预先声明的代理!这是一个特殊的属性,对简单的程序非常有用,创建的每个队列都使用与队列名称相同的路由键自动绑定到它。
简介和AMQP - 图4