Spring学习笔记3之消息队列(rabbitmq)发送邮件功能

网友投稿 698 2023-07-11


Spring学习笔记3之消息队列(rabbitmq)发送邮件功能

rabbitmq简介:

MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。其中较为成熟的MQ产品有IBM WEBSPHERE MQ。

本节的内容是用户注册时,将邮箱地址先存入rabbitmq队列,之后返回给用户注册成功;之后消息队列的接收者从队列中获取消息,发送邮件给用户。

一、RabbitMQ介绍

如果之前对rabbitmq不了解,推荐先看一下RabbitMQ Quick(快速手册)。

1、rabbitmq在mac上的安装。

2、rabbitmq简单介绍。

生产者: 负责发送消息到Exchange。

Exchange: 按照一定的策略,负责将消息存入到指定的队列。

队列queue:  负责保存消息。

消费者: 负责从队列中提取消息。

binding: 负责Exchange和队列的关联映射,Exchange和queue是多对多的关系。

二、RabbitMQ在Spring中的实现

1、引入依赖包。

org.springframework.amqp

spring-amqp

1.6.0.RELEASE

org.springframework.amqp

spring-rabbit

1.6.0.RELEASE

2、rabbitmq配置文件。

xmlns:beans="http://springframework.org/schema/beans"

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://springframework.org/schema/rabbit

http://springframework.org/schema/rabbit/spring-rabbit.xsd

http://springframework.org/schema/beans

http://springframework.org/schema/beans/spring-beans.xsd">

host="localhost"

port="5672"

username="everSeeker"

password="333" />

xmlns:beans="http://springframework.org/schema/beans"

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://springframework.org/schema/rabbit

http://springframework.org/schema/rabbit/spring-rabbit.xsd

http://springframework.org/schema/beans

http://springframework.org/schema/beans/spring-beans.xsd">

host="localhost"

port="5672"

username="everSeeker"

password="333" />

host="localhost"

port="5672"

username="everSeeker"

password="333" />

connection-factory="connectionFactory" />

method="handleUserAlertToEmail"

queues="userAlertEmailQueue" />

method="hahttp://ndleUserAlertToCellphone"

queues="userAlertCellphoneQueue" />

method="handleUserAlertToEmail"

queues="userAlertEmailQueue" />

method="hahttp://ndleUserAlertToCellphone"

queues="userAlertCellphoneQueue" />

method="hahttp://ndleUserAlertToCellphone"

queues="userAlertCellphoneQueue" />

如果配置connection-factory时,采用默认的guest/guest账号密码时,有可能会出现org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.的错误提示,解决办法是新建一个管理员权限的用户,并允许访问虚拟主机。

步骤如下:

1、打开http://localhost:15672/

2、Admin ——> Users, 新建用户,administrator权限。

3、Virtual Hosts,设置新建用户允许访问。

3、生产者发送消息到exchange。

@Service("userAlertService")

public class UserAlertServiceImpl implements UserAlertService {

private RabbitTemplate rabbit;

@Autowired

public UserAlertServiceImpl(RabbitTemplate rabbit) {

this.rabbit = rabbit;

}

public void sendUserAlertToEmail(User user) {

//convertAndSend(String exchange, String routingKey, Object object), 将对象object封装成Message对象后, 发送给exchange

rabbit.convertAndSend("user.alert.email.exchange", "user.alerts.email", user);

}

}

4、配置消费者来接收消息。

public class UserAlertHandler {

public void handleUserAlertToEmail(User user) {

System.out.println(user);

}

三、通过javax.mail来发送邮件

1、引入依赖包。

javax.mail

mail

1.4.7

2、配置邮件服务器信息。

@Bean

public MailSender mailSender(Environment env) {

JavaMailSenderImpl mailSender = new JavaMailSenderImpl();

//如果为普通邮箱, 非ssl认证等, 比如163邮箱

mailSender.setHost(env.getProperty("mailserver.host"));

mailSender.setPort(Integer.parseInt(env.getProperty("mailserver.port")));

mailSender.setUsername(env.getProperty("mailserver.username"));

mailSender.setPassword(env.getProperty("mailserver.password"));

mailSender.setDefaultEncoding("utf-8");

//如果邮件服务器采用了ssl认证, 增加以下配置, 比如gmail邮箱, qq邮箱

Properties props = new Properties();

props.put("mail.smtp.auth", "true");

props.put("mail.smtp.starttls.enable", "true");

props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");

props.put("mail.smtp.socketFactory.port", "465");

mailSender.setJavaMailProperties(props);

return mailSender;

}

3、发送邮件。

@Component("userMailService")

public class UserMailServiceImpl implements UserMailService {

private MailSender mailSender;

@Autowired

public UserMailServiceImpl(MailSender mailSender) {

this.mailSender = mailSender;

}

public void sendSimpleUserMail(String to, User user) {

SimpleMailMessage message = new SimpleMailMessage();

message.setFrom("xxxxxxxx@qq.com");

message.setTo(to);

message.setSubject(user.getUsername() + "信息确认");

message.setText(user.toString());

mailSender.send(message);

}

}

4、消费者调用发送邮件方法即可。

1、参考文献:Spring实战(第4版)。

2、完整代码在github,地址:https://github.com/everseeker0307/register。

以上所述是给大家介绍的Spring学习笔记3之消息队列(rabbitmq)发送邮件功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:值得Java开发者关注的7款新工具
下一篇:深入理解java中for和foreach循环
相关文章

 发表评论

暂时没有评论,来抢沙发吧~