RabbitMQ基础总结

RabbitMQ的好处

服务解耦,流量削峰,异步调用.

AMQP核心概念

  • Server又称Broker,接收客户端连接,实现AMQP实体服务.
  • Connection连接,应用程序与Broker的网络连接.
  • Channel网络信道,进行消息读写的通道.客户端可以建立多个Channel,每个Channel代表一个会话任务.
  • Message消息,由Properties和Body组成,Properties可以对消息进行修饰,比如消息的优先级,延迟等.Body则就是消息体内容.
  • Virtual host虚拟地址,用于进行逻辑隔离,最上层的消息路由.一个Virtual Host里面可以有若干个Exchange和Queue,同一个Virtual Host里面不可以有相同名称的Exchange或Queue.
  • Exchange交换机,接收消息,根据路由键转发消息到绑定的队列.
  • Binding绑定,Exchange和Queue之间的虚拟连接,binding中可以包含routing key.
  • Routing key路由键,一个路由规则,虚拟机可用它来确定如何路由一个特定消息.
  • Queue也称Message Queue,保存消息并将它们转发给消费者.

Exchange交换机的类型

  • direct直连交换机.RabbitMQ默认的交换机类型,所有发送到直连交换机的消息都会按RouteKey发送到匹配(完全匹配)的队列中.
  • topic主题交换机,所有发送到主题交换机的消息会被转发到所有关心RouteKey中指定Topic的Queue上.交换机将RouteKey和某Topic进行模糊匹配.队列需要绑定一个Topic(#代表匹配一个或多个词,*匹配不多不少一个词).
  • fanout扇出交换机.不处理路由键,只需要简单的将队列绑定到交换机上.转发消息性能好.消息会被转发到所有与扇出交换机绑定的队列上.
  • headers头交换机,根据消息头转发.

如何保证消息的100%投递成功

生产端的可靠性投递:

  • 保障消息的成功发出.
  • 保障MQ节点的成功接收.
  • 发送端收到MQ节点(Broker)确认应答.
  • 完善的消息进行补偿机制.

解决方案:

消息的延迟投递,做二次确认,回调检查.

如何避免消息的重复消费问题

消费端的幂等性保障(避免重复消费):

  • 唯一ID+指纹码 机制,利用数据库主键去重.缺点:高并发下有数据库写入的性能瓶颈.解决方法:跟进ID进行分库分表进行算法路由.
  • 利用Redis的原子性去实现.

RabbitMQ常用的消息投递方式:Confirm确认消息,Return返回消息.

消息的ACK与重回队列,略.

消息的限流

RabbitMQ的消费端限流:BasicQos方法,非自动确认消息的前提下,如果一定数目的消息未被确认,则不进行消费新的消息.

TTL消息

可以设置消息的过期时间,或者给队列添加过期时间.从消息入列开始,只要超时,就会清除消息.

死信队列

利用死信队列,当消息在一个队列中变成死信之后,它能被重写publish到另一个Exchange,这个Exchange就是DLX(死信交换机/死信队列).

消息变成死信的几种情况:消息被拒绝.消息TTL过期.队列达到最大长度.

RabbitMQ集群架构模式

主备模式:又叫Warren,就是一个主备方案.主节点如果挂了,从节点顶上.

远程模式:远程模式可以实现双活,简称Shovel模式,就是让我们可以把消息进行不同数据中心的复制工作,我们可以跨地域的让俩个mq集群互联.

镜像模式:也称为Mirror模式,可以保证100%数据不丢失,应用简单,使用广泛.镜像队列(属于100%数据可靠性解决方案一般是3节点).

多活模式:这种模式是实现异地数据复制的主流模式,因为远程模式配置比较复杂,所以一般实现异地集群都是使用这种双活或者多活模型来去实现的.这种模式需要依赖RabbitMQ的federation插件,可以实现持续的可靠的AMQP数据通信,多活模式在实际配置与应用上非常简单.采用双中心或者多中心结构.

SET化架构

猜你喜欢

转载自blog.csdn.net/qq_40925525/article/details/104629692