Direct案例
1,配置文件
import org.springframework.amqp.core.*; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import static pers.fjl.common.constant.RabbitMQConst.*; @Configuration public class RabbitConfig {
//参数介绍
//1.队列名 2.是否持久化 3.是否独占 4.自动删除 5.其他参数
@Bean public Queue exQueue(){ return new Queue(esQueue,true); }
//参数介绍
//1.交换器名 2.是否持久化 3.自动删除 4.其他参数
@Bean
DirectExchange exchange(){
return new DirectExchange(esExchange,true,false);
}
@Bean
Binding binding(Queue exQueue, DirectExchange exchange){
return BindingBuilder.bind(exQueue)//绑定队列
.to(exchange)//队列绑定到哪个交换器
.with(esBingKey);//绑定路由key,必须指定
}
//参数介绍
//1.队列名 2.是否持久化 3.是否独占 4.自动删除 5.其他参数
@Bean
public Queue emailQueue() { return new Queue(EMAIL_QUEUE, true); }
@Bean
public FanoutExchange emailExchange() { return new FanoutExchange(EMAIL_EXCHANGE, true, false); }
@Bean
public Binding bindingEmailDirect() {
return BindingBuilder.bind(emailQueue())
.to(emailExchange());
}
}
案例:
生产者
@Resource
private RabbitTemplate rabbitTemplate;
@Override public void sendCode(String email) { // 校验账号是否合法 if (!checkEmail(email)) { throw new BizException("请输入正确邮箱"); } // 生成六位随机验证码发送 String code = getRandomCode(); // 发送验证码 EmailDTO emailDTO = EmailDTO.builder() .email(email) .subject("验证码") .content("您的验证码为 " + code + " 有效期30分钟,请不要告诉他人哦!") .build(); rabbitTemplate.convertAndSend(EMAIL_EXCHANGE, null, new Message(JSON.toJSONBytes(emailDTO), new MessageProperties())); }
消费者
import com.alibaba.fastjson.JSON; import org.springframework.amqp.rabbit.annotation.Queue; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Component; import pers.fjl.common.dto.EmailDTO; import static pers.fjl.common.constant.RabbitMQConst.EMAIL_QUEUE; /** * RabbitMq邮箱消费者 * **/ @Component @RabbitListener(queues = EMAIL_QUEUE) public class EmailConsumer { /** * 邮箱号 */ @Value("${spring.mail.username}") private String email; @Autowired private JavaMailSender javaMailSender; @RabbitHandler public void process(byte[] data) { EmailDTO emailDTO = JSON.parseObject(new String(data), EmailDTO.class); SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(email); message.setTo(emailDTO.getEmail()); message.setSubject(emailDTO.getSubject()); message.setText(emailDTO.getContent()); javaMailSender.send(message); } }
好记性不如烂笔头
浙公网安备 33010602011771号