RabbitMQ
2025-04-20 21:36:48 0 举报
RabbitMQ是一款开源的消息代理软件,核心地它是一种消息队列服务器。它用于在分布式系统之间进行可靠的信息传输。支持各种消息协议,而且其高效的负载均衡和故障转移机制,使它成为处理高流量数据的理想选择。RabbitMQ实现简单,易于使用,用户友好,支持多种编程语言。
作者其他创作
大纲/内容
消费端
生产端
Exchange
1.由于Rabbitmq中的一个Queue是可以支持多消费者消费的,所以可以直接增加消费者的数量2.批量消费3.批量拉取消息,然后根据消息的业务特性放到不同的内存队列中,然后利用线程池使用不同的线程去处理队列中的消息4.优化消费端业务逻辑代码
RoutingKey
Client2
BindingKey
推荐:生产端:自定义灵活配置RabbitTemplate、AmqpAdmin、ConnectionFactory消费端:自定义灵活配置RabbitListenerContainerFactory
消息重试
Consumer
1.消费端有对应的消费重试配置2.结合Spring-Retry实现消息的重试(推荐:因为比较灵活)注意:消费端在进行消费重试的时候要在业务层做好幂等性处理
1.生产端可以通过设置publisher-confirm-type=correlated来开启确认模式,当消息由生产端发送到exchange之后会触发一个回调函数注意:我们在RabbitTemplate中一定要自定义实现这个回调函数,也就是实现setConfirmCallback(ConfirmCallback confirmCallback)2.生产端可以通过设置publisher-returns=true来实现让消息无法从exchange成功路由到queue的时候会执行回调函数font color=\"#e80c38\
生产端降低生产速率
消息积压如何快速消费
Broker端
Queue天生保证了顺序性
1.在声明Exchange的时候设置为持久化2.在声明Queue的时候设置为持久化3.使用集群而不是单节点
Client1
1.为了防止消息积压,消费端可以批量进行拉取消息,然后顺序消费,如果这一批消息中某一个消息消费失败了,先根据重试规则进行重试,如果达到重试次数之后依然没有成功,将这个消息发送给DLT中,继续去消费后面的消息,最后依然会批量提交这一批消息注意:如果一个Queue对应有多个消费者,那么无法保证消息的顺序性2.批量拉取消息,然后放到内存队列中,然后利用线程池来进行多线程处理,最后批量提交偏移量
将消息根据业务进行分类,在发送消息的时候将某一业务发送到固定的Queue中可以借助一致性哈希插件来实现
Queue中的消息天生保证了顺序性
消息顺序消费
既要保证消息的顺序性又不产生消息积压
Queue
RabbitMQ Broker
消息不丢失
使用单消费者消费一个Queue
1.生产端有重试配置,最好结合生产端的幂等性配置来实现2.可以结合Spring-Retry来进行重试
1.消费端通过设置acknowledge-mode:=manual开启手动ack关闭自动ack2.消费端可以在RabbitListenerContainerFactory中配置重试策略,也可以使用Spring-Retry进行重试补充:消费端的listener分为两类,一类是direct不支持多线程消费,一类是simple支持多线程消费
0 条评论
下一页