RabbitMQ
文章平均质量分 96
一条粉肠与蛋散
我写的代码,像诗一样优雅
展开
-
RabbitMQ-6.延迟消息
RabbitMQ的消息过期是基于追溯方式来实现的,也就是说当一个消息的TTL到期以后不一定会被移除或投递到死信交换机,而是在消息恰好处于队首时才会被处理。当队列中消息堆积很多的时候,过期消息可能不会被按时处理,因此你设置的TTL时间不一定准确。原创 2024-02-07 16:39:42 · 1086 阅读 · 0 评论 -
RabbitMQ-5.消费者的可靠性
例如我们当前案例中,处理消息的业务逻辑是把订单状态从未支付修改为已支付。我们在用户支付成功后会发送MQ消息到交易服务,修改订单状态为已支付,就可能出现消息重复投递的情况。不过需要注意的是,交易服务并不知道用户会在什么时候支付,如果查询的时机不正确(比如查询的时候用户正在支付中),可能查询到的支付状态也不正确。因此,RabbitMQ必须知道消费者的处理状态,一旦消息处理失败才能重新投递消息。业务判断就是基于业务本身的逻辑或状态来判断是否是重复的请求或消息,不同的业务场景判断的思路也不一样。原创 2024-02-07 16:36:31 · 2485 阅读 · 0 评论 -
RabbitMQ-4.MQ的可靠性
不过出于性能考虑,为了减少IO次数,发送到MQ的消息并不是逐条持久化到数据库的,而是每隔一段时间批量持久化。为了解决这个问题,从RabbitMQ的3.6.0版本开始,就增加了Lazy Queues的模式,也就是惰性队列。:在开启持久化机制以后,如果同时还开启了生产者确认,那么MQ会在消息持久化以后才发送ACK回执,进一步确保消息的可靠性。消息到达MQ以后,如果MQ不能及时保存,也会导致消息丢失,所以MQ的可靠性也非常重要。在控制台发送消息的时候,可以添加很多参数,而消息的持久化是要配置一个。原创 2024-02-06 15:16:08 · 1849 阅读 · 2 评论 -
RabbitMQ-3.发送者的可靠性
每个只能配置一个,因此我们可以在配置类中统一设置。我们在publisher模块定义一个配置类:@Slf4j@Overridelog.error("触发return callback,");});由于每个消息发送时的处理逻辑不一定相同,因此ConfirmCallback需要在每次发消息时定义。具体来说,是在调用RabbitTemplate中的convertAndSend方法时,多传递一个参数:id:消息的唯一标示,MQ对不同的消息的回执以此做判断,避免混淆。原创 2024-02-06 15:09:57 · 1951 阅读 · 1 评论 -
RabbitMQ-2.SpringAMQP
多个消费者绑定到一个队列,同一条消息只会被一个消费者处理通过设置prefetch来控制消费者预取的消息数量交换机的作用是什么?接收publisher发送的消息将消息按照规则路由到与之绑定的队列不能缓存消息,路由失败,消息丢失FanoutExchange的会将消息路由到每个绑定的队列描述下Direct交换机与Fanout交换机的差异?Fanout交换机将消息路由给每一个与之绑定的队列Direct交换机根据RoutingKey判断路由给哪个队列。原创 2024-02-05 17:58:18 · 1768 阅读 · 1 评论 -
RabbitMQ-1.介绍与安装
消息Broker,目前常见的实现方案就是消息队列(MessageQueue),简称为MQ.追求可用性:Kafka、 RocketMQ 、RabbitMQ追求可靠性:RabbitMQ、RocketMQ追求吞吐能力:RocketMQ、Kafka追求消息低延迟:RabbitMQ、Kafka。原创 2024-02-05 17:55:54 · 1525 阅读 · 0 评论