(一)、配置文件
注意:普通交换机绑定备份交换机
//声明交换机
@Bean("exchangeA")
public DirectExchange exchangeA() {
Map<String, Object> arguments = new HashMap<>();
arguments.put("alternate", BACKUP_EXCHANGE);
return new DirectExchange(CONFIRM_EXCHANGE_A, true, false, arguments);
}
/**
* @author Mr.simple
* @description 利用备份交换机达到消息回退的功能 备份交换机的优先级比队列回退的要高一些
* @time 2021/12/23 12:01
*/
@Configuration
public class BackupConfig {
//正常交换机
public static final String CONFIRM_EXCHANGE_A = "confirm.exchange.a";
//备份交换机
public static final String BACKUP_EXCHANGE = "backup.exchange";
//正常队列
public static final String CONFIRM_QUEUE_A = "confirm.queue.a";
//备份交换机连接队列1 继续尝试连接队列
public static final String BACKUP_QUEUE_INFO = "backup.queue.info";
//备份交换机连接队列2 发送警告信息
public static final String BACKUP_QUEUE_WARNING = "backup.queue.warn";
//正常的routing_key
public static final String ROUTING_KEY_A = "routing.key.a";
//声明交换机
@Bean("exchangeA")
public DirectExchange exchangeA() {
Map<String, Object> arguments = new HashMap<>();
arguments.put("alternate", BACKUP_EXCHANGE);
return new DirectExchange(CONFIRM_EXCHANGE_A, true, false, arguments);
}
@Bean("backupExchange")
public FanoutExchange backupExchange() {
return new FanoutExchange(BACKUP_EXCHANGE, true, false, null);
}
//声明队列
@Bean("confirmQueueA")
public Queue confirmQueueA() {
return QueueBuilder.durable(CONFIRM_QUEUE_A).build();
}
@Bean("backupQueueInfo")
public Queue backupQueueInfo() {
return QueueBuilder.durable(BACKUP_QUEUE_INFO).build();
}
@Bean("backupQueueWarning")
public Queue backupQueueWarning() {
return QueueBuilder.durable(BACKUP_QUEUE_WARNING).build();
}
//绑定
@Bean
public Binding exchangeABindingConfirmQueueA(@Qualifier("confirmQueueA") Queue confirmQueueA,
@Qualifier("exchangeA") DirectExchange exchangeA) {
return BindingBuilder.bind(confirmQueueA).to(exchangeA).with(ROUTING_KEY_A);
}
@Bean
public Binding backupExchangeBindingBackupQueueInfo(@Qualifier("backupQueueInfo") Queue backupQueueInfo,
@Qualifier("backupExchange") FanoutExchange backupExchange) {
return BindingBuilder.bind(backupQueueInfo).to(backupExchange);
}
@Bean
public Binding backupExchangeBindingBackupQueueWarning(@Qualifier("backupQueueWarning") Queue backupQueueWarning,
@Qualifier("backupExchange") FanoutExchange backupExchange) {
return BindingBuilder.bind(backupQueueWarning).to(backupExchange);
}
}
(二)、消息消费者
@Slf4j
@Component
public class WarningConsumer {
@RabbitListener(queues = BackupConfig.BACKUP_QUEUE_WARNING)
public void warningMessage(Message message) {
String msg = new String(message.getBody());
log.info("报警队列收到了信息:{}", msg);
}
}