【RabbitMQ】简介


  RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,RabbitMQ是适用Erlang语言来编写的,并且RabbitMQ是基于AMQP协议的。

1. 为什么选择RabbitMQ

  1. 开源,性能优秀,稳定性好
  2. 提供可靠的消息投递模式(confirm)、返回模式(return)
  3. 保证数据不丢失的前提做到高可用性、可靠性
  4. 集群模式丰富:表达式配置、HA模式、镜像队列模式
  5. 与springAMQP完美结合,API丰富

1.1 RabbitMQ高性能的原因

  1. Erlang语言最初用户交换机领域的架构模式,这样使得RabbitMQ在Brocker之间进行数据交互的性能非常优秀
  2. Erlang有着和原生socket一样的延迟

2. AMQP协议

2.1 什么是AMQP协议

  高级消息队列协议(Advanced Message Queueing Protocol),是具有现代特征的二进制协议,是一个是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开发标准,为面向消息的中间件设计

2.2 AMQP协议模型


3. RabbitMQ架构图


4. RabbitMQ消息流转过程


5. RabbitMQ消息从生产到消费的过程

  1. 生产者,消费者创建连接
  2. 生产者通过channel发送消息到exchange交换机
  3. 交换机通过绑定的routingKey路由到Queue队列
  4. 消费者从queue取出消息进行消费

6. RabbitMQ 4种交换机Exchange类型

  RabbitMQ交换机一共有4种类型:分别是Direct Exchange、Topic Exchange、Fanout Exchange、Headers Exchange

6.1 Direct Exchange

  所有发送到Direct Exchange的消息被转发到RouteKey中指定的Queue(Direct模式可以使用RabbitMQ自动的Exchange:Default Exchange,所以不需要将Exchange进行任何绑定bing操作,消息传递时,RouteKey必须完全匹配才会被队列接收即Exchange和RouteKey名称一致,否则该消息会被抛弃)

6.2 Topic Exchange

  所有发送到Topic Exchange的消息被转发到所有关心RouteKey中指定Topic的Queue上。Exchange将RouteKey和某Topic进行模糊匹配,此时队列需要绑定一个Topic(#:匹配一个或多个单词;*:匹配一个词)

6.3 Fanout Exchange

  1. 不处理路由键,只需要简单的将队列绑定到交换机上
  2. 发送到交换机的消息会被转发到该交换机绑定的所有队列上
  3. Fanout交换机转发消息是最快的

6.4 Headers Exchanges

  不处理路由键。而是根据发送的消息内容中的headers属性进行匹配。在绑定Queue与Exchange时指定一组键值对;当消息发送到RabbitMQ时会取到该消息的headers与Exchange绑定时指定的键值对进行匹配;如果完全匹配则消息会路由到该队列,否则不会路由到该队列。headers属性是一个键值对,可以是Hashtable,键值对的值可以是任何类型。而fanout,direct,topic 的路由键都需要要字符串形式的(一般不适用此种方法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值