Rabbit MQ

1.MQ的作用

首先MQ主要作用有 异步 削峰 解耦

异步:MQ允许生产者将消息放入队列中,而不需要等待消费者立即处理。这使得生产者和消费者能够以异步的方式进行通信,从而提高系统的并发性和响应性

削峰:可以缓解短时间的高流量压垮应用,当系统负载较高时,消息可以在队列中缓冲,避免过载。而在负载较低时,消费者可以按照自己的处理能力从队列中获取消息

解耦:生产者只需将消息发送到队列中,而不需要了解消息的消费者是谁或如何处理消息。消费者可以根据自己的需求从队列中获取消息并进行处理

2.交换机类型

  1. Direct Exchange直连型交换机)队列被赋予routing key之后绑定交换机,生产者将一个带有routing key的消息发送到交换机,交换机将这个消息发送到相对应的routing key的队列
  2. Fanout Exchange(扇型(广播)交换机)广播交换机没有路由键(routing key)概念,就算你绑了路由键也是无视的。 广播交换机在接收到消息后,会直接转发到绑定到它上面的所有队列
  3. Topic Exchange主题交换机)主题交换机根据消息的路由键(routing key)将消息发送到符合特定主题模式的队列中。当消息到达主题交换机时,交换机会根据消息的路由键和队列绑定的路由键模式进行匹配。路由键可以使用通配符来表示匹配规则,其中 "*" 表示匹配一个单词,"#" 表示匹配零个或多个单词。

ps:

当一个队列的绑定键为 "#"(井号) 的时候,这个队列将会无视消息的路由键,接收所有的消息。

当 * (星号) 和 # (井号) 这两个特殊字符都未在绑定键中出现的时候,此时主题交换机就拥有的直连交换机的行为。

如果只有 # ,它就实现了扇形交换机的功能。

3.如何保证消息不丢失

死信队列

死信就是当 消息被拒绝访问,消费者发生异常,超过重试次数 ,消息的 TTL 过期时长或队列过期时间,消息队列达到最大长度 时,MQ会将该消息发送到死信队列中,以便进一步处理或分析失败原因。

死信队列就是用于储存死信的消息队列,有且只有死信构成,不会存在其余类型的消息。死信队列在 RabbitMQ 中并不会单独存在,它只需要在声明业务队列的时候,绑定指定的死信交换机和RoutingKey即可,当所绑定的消息队列中,有消息变成死信了,那么这个消息就会重新被交换机路由到指定的死信队列中去,我们可以通过对这个死信队列进行监听,从而手动的去对这一消息进行补偿

你可能感兴趣的:(springcloud,java,中间件,网络)