使用Springboot集成ActiveMQ後發送郵件

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

 

三、測試郵件發送

1.啓動生產者

2.啓動消費者

3.查看發送郵箱

4.查看接收的郵箱

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章