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);
    }

}

 

posted on 2022-06-27 16:10  让代码飞  阅读(25)  评论(0)    收藏  举报

导航

一款免费在线思维导图工具推荐:https://www.processon.com/i/593e9a29e4b0898669edaf7f?full_name=python