1、pom依赖
2、yml配置文件
3、属性配置类
@Component
public class FanoutExchangeConfig {
/**
* 短信队列
*/
public static final String FANOUT_SMS_QUEUE="fanout_sms_queue";
/**
* 邮件队列
*/
public static final String FANOUT_EMAIL_QUEUE="fanout_email_queue";
/**
* fanous交换机
*/
public static final String FANOUT_EXCHANGE="fanout_exchange";
/**
* 短信队列
* @return
*/
@Bean
public Queue fanoutSmsQueue(){
return new Queue(FANOUT_SMS_QUEUE);
}
/**
* 邮件队列
* @return
*/
@Bean
public Queue fanoutEmailQueue(){
return new Queue(FANOUT_EMAIL_QUEUE);
}
/**
* fanout交换机
* @return
*/
@Bean
public FanoutExchange fanoutExchange(){
return new FanoutExchange(FANOUT_EXCHANGE);
}
/**
* 绑定短信列队到交换机
* @param fanoutSmsQueue
* @param fanoutExchange
* @return
*/
@Bean
public Binding bindingSmsFanoutQueue(Queue fanoutSmsQueue,FanoutExchange fanoutExchange){
return BindingBuilder.bind(fanoutSmsQueue).to(fanoutExchange);
}
/**
* 绑定邮件列队到交换机
* @param fanoutEmailQueue
* @param fanoutExchange
* @return
*/
@Bean
public Binding bindingEmailFanoutQueue(Queue fanoutEmailQueue,FanoutExchange fanoutExchange){
return BindingBuilder.bind(fanoutEmailQueue).to(fanoutExchange);
}
}
4、生产者
@Service
@Slf4j
public class ProductFanoutService {
@Autowired
private AmqpTemplate rabbitTemplate;
@Autowired
private FanoutExchangeConfig fanoutExchangeConfig;
public void send(String routingKey) {
JSONObject jsonObject=new JSONObject();
jsonObject.put("code","1000");
jsonObject.put("name","测试");
jsonObject.put("msg","这是一条Fanout队列测试消息");
jsonObject.put("date",new Date());
jsonObject.put("routingKey",routingKey);
log.info("【生产者 】 " + jsonObject.toJSONString());
this.rabbitTemplate.convertAndSend(fanoutExchangeConfig.FANOUT_EXCHANGE,routingKey,jsonObject.toJSONString());
}
}
5、短信消费者
@Service
@Slf4j
@RabbitListener(queues = "fanout_sms_queue")
public class SmsConsumerFanoutService {
@RabbitHandler
public void receiver(String msg) {
log.info("【短信消费者】"+msg);
}
}
6、邮件消费者
@Service
@Slf4j
@RabbitListener(queues = "fanout_email_queue")
public class EmailConsumerFanoutService {
@RabbitHandler
public void receiver(String msg) {
log.info("【邮件消费者】"+msg);
}
}
7、测试类
@Api(tags = "RabbitMq::测试")
@RestController
@RequestMapping("/rabbitmq")
public class RabbitMqController {
@Autowired
private ProductFanoutService productFanoutService;
@ApiOperation("fanout交换机")
@PostMapping("/fanout")
public RespVo fanout(){
productFanoutService.send("");
return RespVo.success();
}
}
8、swagger测试
9、日志