Springboot集成ActiveMQ可以實現異步發送郵件
一、創建生產者
1.1導入maven依賴
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<!-- 管理依賴 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.M7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- SpringBoot整合Web組件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringBoot Activemq -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.49</version>
</dependency>
</dependencies>
<!-- 注意: 這裏必須要添加, 否者各種依賴有問題 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
1.2.引入application.yml配置
server:
port: 8080
spring:
activemq:
broker-url: tcp://127.0.0.1:61616
user: admin
password: admin
queue: gothic-queue2
1.3.創建Queue配置
@Component
public class ConfigQueue {
@Value("${queue}")
private String queueName;
//將隊列注入到Springboot容器
@Bean
public Queue queue(){
return new ActiveMQQueue(queueName);
}
}
1.4.創建producer
@Component
public class QueueProducer {
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@Autowired
private Queue queue;
private int count = 1;
//設置五秒鐘往郵箱發送一次消息
@Scheduled(fixedDelay = 5000)
public void send() {
JSONObject jsonObject = new JSONObject();
String userName = System.currentTimeMillis() + "";
jsonObject.put("userName", userName);
//設置目標郵箱
jsonObject.put("email", "[email protected]");
String msg = jsonObject.toJSONString();
System.out.println("生產者向消費者發送內容:" + msg);
jmsMessagingTemplate.convertAndSend(queue, msg);
}
1.5.創建啓動類
@EnableScheduling
@SpringBootApplication
public class ProducerApp {
public static void main(String[] args) {
SpringApplication.run(ProducerApp.class,args);
}
}
二、創建消費者
2.1.導入maven依賴
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<!-- 管理依賴 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.M7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- SpringBoot整合Web組件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringBoot Activemq -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.49</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
</dependencies>
<!-- 注意: 這裏必須要添加, 否者各種依賴有問題 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
2.2.引入application.yml文件
server:
port: 8081
spring:
activemq:
broker-url: tcp://127.0.0.1:61616
user: admin
password: admin
mail:
host: smtp.163.com
username: [email protected]
##此處並非發送者郵箱的密碼,而是授權碼
password: liumiao123
enable: true
smtp:
auth: true
starttls:
enable: true
required: true
queue: gothic-queue2
關於163郵箱在配置文件中的password爲授權碼,該授權碼實在163郵箱設置中開啓POP3
1.進入163設置
2.設置POP3
3.按照流程獲取客戶端授權碼
2.3.創建consumer
@Component
public class QueueConsumer {
@Autowired
JavaMailSender javaMailSender;
//獲取發送郵箱賬號
@Value("${spring.mail.username}")
private String fromEmail;
@JmsListener(destination = "${queue}")
public void receive(String msg) {
System.out.println("消費者接收到消息爲:" + msg);
if (StringUtils.isEmpty(msg)) {
return;
}
JSONObject jsonObject = JSONObject.parseObject(msg);
String userName = jsonObject.getString("userName");
String toEmail = jsonObject.getString("email");
sendSimpleEmail(toEmail, userName);
}
/**
* @Description:
* @Param: toEmail 目標郵箱
* @Return:
* @Auther:
* @Date: 2019/11/24 14:47
*/
public void sendSimpleEmail(String toEmail, String userName) {
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setFrom(fromEmail);
simpleMailMessage.setTo(toEmail);
simpleMailMessage.setSubject("測試發郵件");
simpleMailMessage.setText("用戶名爲:" + userName);
javaMailSender.send(simpleMailMessage);
System.out.println("郵件發送完成");
}
}
2.4.創建啓動類
@SpringBootApplication
public class ConsumerApp {
public static void main(String[] args) {
SpringApplication.run(ConsumerApp.class,args);
}
}