RabbitMQ实战指南-RabbitMQ简介

1、什么是消息中间件?

 消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串、JSON等,也可以很复杂,比如内嵌对象。

 消息队列中间件(Message Queue Middleware,简称MQ)是指利用高效可靠的消息传递机制进行与平台无关的数据交流。并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。

  它一般有两种传递模式:

  • 点对点模式
  • 发布订阅模式

2、消息中间件的作用

  • 解耦
  • 冗余 (存储):有些情况下,处理数据的过程会失败。消息中间件可以把数据进行持久化知道它们被处理完成,通过这一方式规避了数据丢失。在把一个消息从消息中间件中删除前,需要你的处理系统明确的指出该消息已经被处理完成了。
  • 扩展性 :因为消息中间件解耦了应用的处理过程,所以提高消息入队和处理的效率是很容易的,只要另外增加处理过程就可以了,不需要改变代码,也不需要调节参数
  • 削峰 : 在访问量剧增的情况下,使用消息中间件能够使关键组件支撑突发访问压力,不会因为突发的超负荷请求而完全崩溃
  • 可恢复性
  • 顺序保证
  • 缓冲
  • 异步通信 :在很多情况下一些应用不需要立即处理消息。消息中间件可以提供异步处理机制 

3、相关概念

  • Exchange : 交换器,负责接收生成者的消息并路由到一个或多个消息队列中,它有四种类型:
    • direct :RoutingKey 和 BindingKey 完全匹配
    • fanout :将消息路由到所有与交换机绑定的队列中
    • topic : RoutingKey 和 BindingKey 都是 " . "分割的字符串,BindingKey中允许两个特殊字符 ” # “ 和 ” *  “ 来模糊匹配,# 可匹配多个单词,* 只能匹配一个单词
  • Binding : 绑定,RabbitMQ中通过绑定将交换器和队列关联起来,在绑定的时候会指定一个BindingKey,这样RabbitMQ就知道如何正确的将消息路由到队列了。
  • pupRoutingKey :路由键,用来指定这个消息的路由规则

4、Mandatory参数

  • mandatory == true :无法匹配到消息队列,那么消息返回生产者,可以通过调用channel.addReturnListener来添加ReturnListener监听器来获取消息
  • mandatory == false :无法匹配到消息队列,消息直接丢失

5、immediate参数

  • immediate == true :当交换机在将消息路由到队列时,如果发现这个队列没有消费者就不会保存消息到这个队列。当与路由键匹配的所有队列都没有消费者,就将消息返回给生成者。
  • 版本3.0去掉了该参数的支持 

6、备份交换机(Alternate Exchange)

  消息未被路由的情况下,不想消息丢失可以采取备份交换机

  • 在声明交换器(调用channel.exchangeDeclare)时添加参数alternate-exchange来实现
  • 或者通过策略方式实现,上面方式优先级更高
posted @ 2020-08-10 16:48  TPL  阅读(158)  评论(0编辑  收藏  举报