rabbitmq基础

rabbitmq基础概念

众所周知,rabbitmq是一个非常热门的消息队列中间件。这里对消息队列中间件的定义如下:
利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信

消息队列的应用场景:

  • 解耦:可以独立的扩展和修改消息队列两边的处理过程。
  • 冗余(存储):使用消息队列做消息的持久化存储,直到他们被完全处理,这样规避了数据丢失的风险。
  • 扩展:因为消息队列解耦了应用的处理过程,所以提高消息入队和处理效率效率较为容易
  • 削峰:应对突发流量时,使用消息队列可以支撑访问压力,不会因为突发的超负荷请求而完全崩溃。
  • 异步通信:在很多时候,一些消息不需要立刻处理,消息中间件提供了异步处理机制,可以先把消息放到消息中间件中,然后通过消费队列逐渐处理。

rabbitmq整体架构模型:

rabbitmq基础_第1张图片
上图为rabbitmq的架构图,那可以看到,Exchange和队列共同组成了broker。在rabbitmq中,所有的消息投递都是投递到交换机中,然后由交换机根据一定的规则把消息转发到对应的队列中。如果消息没有匹配到规则,就可能丢失。

bindingKey和routingkey

通过上图,可以看到,发送一条消息到队列中,其实需要2步。首先,生产者先将消息送到交换机;然后交换机再将消息保存到队列中;这两个步骤,就引出了bindingKey和routingKey。
routingKey用于发送消息的时候,即在发送消息时,需要给消息添加一个routingKey,有了这个routingKey,交换机根据规则,判断routingKey和bindingKey的关系,从而将对应的消息路由给队列
rabbitmq基础_第2张图片
rabbitmq中存在不同的类型,如direct,topic类型等,因为这些类型不同,那么bindingKey的处理方式也不同。

rabbitmq中的交换器类型

  • fanout:它会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中。
  • direct:它会把消息路由到BindingKey和RoutingKey完全匹配的队列中。
  • topic:它扩展了BindingKey和RoutingKey的匹配规则,即BindingKey 中可以存在两种特殊字符串“*”和“#”,用于做模糊匹配,其中“#”用于匹配一个单词,“#”用于匹配多规格单词(可以是零个)。

topic类型的交换器在匹配规则上进行了扩展,它与direct类型的交换器相似,也是将消息路由到BindingKey和RoutingKey相匹配的队列中,但这里的匹配规则有些不同,它约定:RoutingKey 为一个点号“.”分隔的字符串(被点号“.”分隔开的每一段独立的字符串称为一个单词),如“com.rabbitmq.client”、“java.util.concurrent”、“com.hidden.client”;BindingKey和RoutingKey一样也是点号“.”分隔的字符串;BindingKey 中可以存在两种特殊字符串“”和“#”,用于做模糊匹配,其中“#”用于匹配一个单词,“#”用于匹配多规格单词(可以是零个)。*

你可能感兴趣的:(mq,java-rabbitmq,rabbitmq,java)