Serializable
pom.xml
org.springframework.boot spring-boot-starter-amqp
/** * 配置mq交换器及声明队列 * @Author 夏秋初 * @Date 2021/11/27 19:48 */ @Configuration public class RabbitConfig { /** * 声明email队列 * @return */ @Bean public Queue userEmailVerify() { // true表示持久化该队列 return new Queue("user.email.verify", true); } // /** // * 声明交互器 topic // * @return // */ // @Bean // TopicExchange topicExchange() { // return new TopicExchange("topicExchange"); // } /** * 声明交互器/交换机 direct * @return */ @Bean DirectExchange directExchange() { return new DirectExchange("direct.exchange"); } /** * 绑定email队列,并设置路由key,如果还有别的队列,再创建一个函数绑定即可 * @return */ @Bean public Binding bindingUserEmailVerify() { return BindingBuilder.bind(userEmailVerify()).to(directExchange()).with("user.email.verify"); } }
/** * 发送者 * @Author 夏秋初 * @Date 2021/11/27 19:54 */ @Component public class UserEmailVerifyProducer { @Resource private AmqpTemplate amqpTemplate; /** * 发送邮件队列 * @param userVerificationCodeEmailDto */ public void sendEmail(UserEmailVerifyDto userVerificationCodeEmailDto){ System.out.println("生产者 user.email.verify 发送消息: "+userVerificationCodeEmailDto); /** * 第一个参数指定交换机 * 第二个参数指定队列 * 第三个参数指定消息内容 */ amqpTemplate.convertAndSend("direct.exchange", "user.email.verify", userVerificationCodeEmailDto.toString()); } }
/** * 消费者 * @Author 夏秋初 * @Date 2021/11/27 20:23 */ @Component // 监听指定队列 @RabbitListener(queues = "user.email.verify") public class UserEmailVerifyConsumer { @RabbitHandler public void process(String content){ System.out.println("消费者 user.email.verify 收到消息: "+content ); } }
/** * @Author 夏秋初 * @Date 2021/11/27 20:00 */ @Data public class UserEmailVerifyDto implements Serializable { private String email; private Integer code; private String cOntent= "您的邮箱验证码为:%d,请不要告诉别人哦"; }
application.properties
# 如果访问局域网的mq服务,需要配置账户并允许远程访问 ,参考:https://www.cnblogs.com/xiaqiuchu/p/15616432.html spring.rabbitmq.host=192.168.211.2 # 指定端口号 spring.rabbitmq.port=5672 # 指定账号,默认账号不可以在其他机器登录 spring.rabbitmq.username=testmail # 指定密码 spring.rabbitmq.password=testmail