1、pom依赖
2、yml配置文件
3、属性配置类
@Component
public class DirectExchangeConfig {
/**
* 短信队列
*/
public static final String DIRECT_SMS_QUEUE="direct_sms_queue";
/**
* 邮件队列
*/
public static final String DIRECT_EMAIL_QUEUE="direct_email_queue";
/**
* direct
*/
public static final String DIRECT_EXCHANGE="direct_exchange";
/**
* 短信队列
* @return
*/
@Bean
public Queue directSmsQueue(){
return new Queue(DIRECT_SMS_QUEUE);
}
/**
* 邮件队列
* @return
*/
@Bean
public Queue directEmailQueue(){
return new Queue(DIRECT_EMAIL_QUEUE);
}
/**
* direct交换机
* @return
*/
@Bean
public DirectExchange directExchange(){
return new DirectExchange(DIRECT_EXCHANGE);
}
/**
* 绑定短信列队到交换机
* @param directSmsQueue
* @param directExchange
* @return
*/
@Bean
public Binding bindingSmsDirectQueue(Queue directSmsQueue,DirectExchange directExchange){
return BindingBuilder.bind(directSmsQueue).to(directExchange).with("sms");
}
/**
* 绑定邮件列队到交换机
* @param directEmailQueue
* @param directExchange
* @return
*/
@Bean
public Binding bindingEmailDirectQueue(Queue directEmailQueue,DirectExchange directExchange){
return BindingBuilder.bind(directEmailQueue).to(directExchange).with("email");
}
}
4、生产者
@Service
@Slf4j
public class ProductDirectService {
@Autowired
private AmqpTemplate rabbitTemplate;
@Autowired
private DirectExchangeConfig directExchangeConfig;
public void send(String routingKey) {
JSONObject jsonObject=new JSONObject();
jsonObject.put("code","1000");
jsonObject.put("name","测试");
jsonObject.put("msg","这是一条Direct测试消息");
jsonObject.put("date",new Date());
jsonObject.put("routingKey",routingKey);
log.info("【direct生产者 】 " + jsonObject.toJSONString());
this.rabbitTemplate.convertAndSend(directExchangeConfig.DIRECT_EXCHANGE,routingKey,jsonObject.toJSONString());
}
}
5、短信消费者
@Service
@Slf4j
@RabbitListener(queues = "direct_sms_queue")
public class SmsConsumerDirectService {
@RabbitHandler
public void receiver(String msg) {
log.info("【短信消费者】"+msg);
}
}
6、邮件消费者
@Service
@Slf4j
@RabbitListener(queues = "direct_email_queue")
public class EmailConsumerDirectService {
@RabbitHandler
public void receiver(String msg) {
log.info("【邮件消费者】"+msg);
}
}
7、测试类
@Api(tags = "RabbitMq::测试")
@RestController
@RequestMapping("/rabbitmq")
public class RabbitMqController {
@Autowired
private ProductDirectService productDirectService;
@ApiOperation("direct交换机")
@PostMapping("/direct")
public RespVo direct(@Valid @RequestBody RoutingKeyReqVo reqVo){
productDirectService.send(reqVo.getRoutingKey());
return RespVo.success();
}
}
8、swagger测试