- application.properties
spring.rabbitmq.host=192.168.3.202
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123456
spring.rabbitmq.publisher-/confirm/i-type=correlated
spring.rabbitmq.publisher-returns=true
- MyBackupConfig
package cn.cnyasin.rabbit.config;
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyBackupConfig {
// 交换机
public static final String EXCHANGE_NORMAL = "exchange_normal";
public static final String EXCHANGE_BACKUP = "exchange_backup";
// 队列
public static final String QUEUE_NORMAL = "queue_normal";
public static final String QUEUE_BACKUP = "queue_backup";
// 路由key
public static final String ROUTING_NORMAL = "routing_normal";
// 声明交换机
@Bean
public DirectExchange exchangeNormal() {
return ExchangeBuilder.directExchange(EXCHANGE_NORMAL).withArgument(
"alternate-exchange", EXCHANGE_BACKUP // 指定备份交换机
).build();
}
@Bean
public FanoutExchange exchangeBackup() {
return new FanoutExchange(EXCHANGE_BACKUP);
}
// 声明队列
@Bean
public Queue queueNormal() {
return QueueBuilder.durable(QUEUE_NORMAL).build();
}
@Bean
public Queue queueBackup() {
return QueueBuilder.durable(QUEUE_BACKUP).build();
}
// 绑定队列、交换机、路由key
@Bean
public Binding queueNormalBindExchangeNormal(
@Qualifier("queueNormal") Queue queue,
@Qualifier("exchangeNormal") Exchange exchange
) {
return BindingBuilder.bind(queue).to(exchange).with(ROUTING_NORMAL).noargs();
}
@Bean
public Binding queueBackupBindExchangeBackup(
@Qualifier("queueBackup") Queue queue,
@Qualifier("exchangeBackup") Exchange exchange
) {
return BindingBuilder.bind(queue).to(exchange).with("").noargs();
}
}
- MyBackupConsumer
package cn.cnyasin.rabbit.consumer;
import cn.cnyasin.rabbit.config.MyBackupConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import java.util.Date;
@Slf4j
@Component
public class MyBackupConsumer {
@RabbitListener(queues = MyBackupConfig.QUEUE_NORMAL)
public void queueNormalConsumer(String message) {
log.info("[*] [{}] 正常队列收到消息:{}", new Date().toString(), message);
}
@RabbitListener(queues = MyBackupConfig.QUEUE_BACKUP)
public void queueBackupConsumer(String message) {
log.info("[*] [{}] 备份队列收到消息:{}", new Date().toString(), message);
}
}
- MyBackupController
package cn.cnyasin.rabbit.controller;
import cn.cnyasin.rabbit.config.MyBackupConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
@Slf4j
@RestController
@RequestMapping("/backup")
public class MyBackupController {
@Autowired
private RabbitTemplate rabbitTemplate;
@RequestMapping("/send/{msg}")
public String send(@PathVariable String msg) {
log.info("[*] [{}] 准备发送消息:{}", new Date().toString(), msg);
// 发送到存在的路由key
rabbitTemplate.convertAndSend(MyBackupConfig.EXCHANGE_NORMAL, MyBackupConfig.ROUTING_NORMAL, msg);
// 发送到不存在的路由key
rabbitTemplate.convertAndSend(MyBackupConfig.EXCHANGE_NORMAL, "qwe", msg);
return "ok";
}
}