一线大厂的 MQ 组件实现思路和架构设计思路

该博客探讨了一线大厂的MQ集群架构,包括利用keepalived和HA-Proxy实现高可用,以及生产端和消费端组件的设计。重点介绍了生产端的RabbitTemplate池化、幂等性处理、消息序列化和消费端的幂等性保障。提出了MQ组件必须实现的功能,如高性能序列化、连接池化、可靠性投递和幂等性,以及可拓展功能,如迅速发送、延迟发送和事务消息。并详细阐述了各种消息发送模式的实现原理和应用场景。
摘要由CSDN通过智能技术生成

首先来看看一线大厂的 架构图

一线大厂的 架构图

如上图所示,中间是我们的 MQ 集群架构, 在上层利用 keepalived 和 HA-Proxy, 最下面是 两个大的 MQ 集群 做一个高可用。当然了,在实际大厂里面 可能就不止 两个集群了,可以是很多个集群,然后集群之间利用 federration 插件进行数据同步 。

上面的生产端组件:这里面可能就有很多的架构设计,比如生产端怎么对一个容器进行缓存,举个例子,我们生产端发送消息,都是利用 RabbitTemplate 进行,在高并发场景下,你每次发消息都创建一个 RabbitTemplate , 这是影响性能的,那你的 RabbitTemplate 是不是要进行一个池化的操作,也就是 RabbitTemplateContainer, 创建一个 RabbitTemplate 后就进行缓存起来,后面再发这一 topic 主题的消息时就从 缓存里面拿。还有生产消息确认组件 RabbitTemplateConfirmCallback、 消息序列化解析器 RapidMQMessageConverter 封装我们常用的 Json 序列化方法、生产端发送处理器 RabbitBrokerProvider、消息发送客户端 ProducerClient 等等 ,还有 重试策略器、定时抓取器、失败处理器 等等,都是架构组要去封装好的,然后打成一个 jar 包提供给业务线去使用。这里面涉及到的落地技术、设计思想,都是很有必要自己去学习学习的。

消费端组件:首先就是消费者监听容器 RabbitListenerContainerFactory,用于处理和缓存一些消息监听容器。接着就是消费者 幂等性保障拦截器 IdempotentRabbitHandler ,用于做消息的幂等性处理。接着就引出了我们的 消息存储路由选择器 DBRoutingSelector,因为我们数据库是分库分表的,所以在做幂等性的时候具体落库到哪就是这里要做的。然后就是 消息异步处理器 AsyncMessageInter,意思就是消费端接收到消息了,但是我并不是马上就去处理,而是根据优先级别,这个消息可能稍后才会去处理。再接着就是 消息存储幂等服务 IdempotentMessageService ,这个就是做幂等服务的具体实现类。最后就是消费异常监听器 ConsumerFailMessageListener, 在我们消费处理时发生了异常,这时候该怎么去处理, 跟死信队列也会有一些关系,也会有一些对应的配置。这些都是一个整体打成一个 jar,然后提供给到业务线去使用

通过上面的架构图,我们就引出了 MQ 组件必须实现功能点

1. 支持消息高性能的序列化转换、异步化发送消息

2. 支持消息生产实例 与 消费实例的连接池化缓存化,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值