RabbitMQ是开源的消息代理和队列服务器,用来通过不同协议在不同的应用之间数据共享。RabbitMq是基于AMQP协议的,
服务器节点出传输和复制 是非常优秀的!
性能优秀 、 稳定性保障
与SpringAMQP 完美整合
提供集群模式、表达式配置,镜像队列模型
镜像队列模型:保证数据不丢失的前提可做到高可靠、可用性
生产者 —> 虚拟主机 —>交换机 —> 消息队列
交换机和消息队列 之间的 关系 是绑定 关系 通过路由规则实现查找!
消费者 —> 消息队列 消费者只需要关注消息队列就ok
比较重要的概念有 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.
这个默认的交换机是一个直连交换机,默认跟随着一个名称是空字符串,通过预先声明的代理!这是一个特殊的属性,对简单的程序非常有用,创建的每个队列都使用与队列名称相同的路由键自动绑定到它。