@AutoConfiguration
@Import(value={MessageConfirmCallback.class,MqSendFailServiceImpl.class,ReSendMessageTask.class,MqRepeatConsumeServiceImpl.class})
@EnableConfigurationProperties(value=RabbitmqExtProperties.class)
public class LyRabbitMqAutoConfiguration
extends Object
交换机必须与队列进行绑定, 当队列没有指定交换机时候,会有一个默认的交换机
生产者发布的消息都是投递给交换机, 交换机会根据type,有选择的发送给队列
生产者发送失败和消费者消费失败处理
2、消息发了但是mq没收到,或者mq收到了但是进入到交换机之前(如果开启了消息持久化,那则是持久化之前。交换机、队列、消息默认都是持久化的)消息丢了。 答:rabbitmq有confirm机制,即mq收到消息后会发送一个叫ack的标识给生产者,ack为true表示收到了,ack为false表示没收到或丢了。 rabbitTemplate中有confirmCallback,在这个callback里把ack为false的消息存到缓存,用另外线程重发。
3. 消息到交换机了,但是找不到对应的queue。 答:rabbitmq有return机制,在rabbitTemplate中有returnCallback。找不到queue的消息都会进入到这个callback, 在这个callback里把消息存到缓存,用另外线程重发。
如果消息发送失败, 会主动回调 MqSendFailHandler 实现的接口
由于mq重启或者网络波动会导致消息丢失问题, 这里采用redis缓存存放发送失败的消息, 定时重发(依赖redis缓存)
@PostConstruct public void init()
Copyright © 2023. All rights reserved.