SpringBoot整合ActiveMQ发送邮件
虽然ActiveMQ以被其他MQ所替代,但仍有学习的意义,本文采用邮件发送的例子展示ActiveMQ
1. 生产者1.1 引入maven依赖1.2 application.yml配置1.3 创建配置类ConfigQueue1.4 创建生产者类Producer1.5 启动类AppProducer2. 消费者2.1 引入maven依赖2.2 application.yml配置2.3 创建消费者类Consumer2.4 启动类AppConsumer3. 启动截图3.1 生产者截图3.2 消费者截图3.3 ActiveMQ后台截图3.4 邮件系统截图
1. 生产者
1.1 引入maven依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itmayiedu</groupId>
<artifactId>springboot-p2p-roducer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<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>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<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>
</project>
1.2 application.yml配置
spring:
activemq:
###MQ连接通讯地址
broker-url: tcp://127.0.0.1:61616
###账号
user: admin
###密码
password: admin
###自定义队列
my_queue: springboot2.0-queue
server:
port: 8089
1.3 创建配置类ConfigQueue
@Component
public class ConfigQueue {
@Value("${my_queue}")
private String myQueue;
/**
* 1.首先需要将队列注入springboot容器中
*
* @return
*/
@Bean
public Queue queue() {
return new ActiveMQQueue(myQueue);
}
}
1.4 创建生产者类Producer
@Component
public class Producer {
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@Autowired
private Queue queue;
/**
* 每隔5秒种时间向队列中发送消息
*/
@Scheduled(fixedDelay = 5000)
public void send() {
String userName = System.currentTimeMillis() + "";
JSONObject jsonObject = new JSONObject();
jsonObject.put("userName", userName);
jsonObject.put("email", "apkdream@163.com");
String msg = jsonObject.toJSONString();
jmsMessagingTemplate.convertAndSend(queue, msg);
System.out.println("采用点对点通讯模式,msg:" + msg);
}
}
1.5 启动类AppProducer
@SpringBootApplication
@EnableScheduling
public class AppProducer {
public static void main(String[] args) {
SpringApplication.run(AppProducer.class, args);
}
}
2. 消费者
2.1 引入maven依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itmayiedu</groupId>
<artifactId>springboot-p2p-consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<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>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</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>
</project>
2.2 application.yml配置
spring:
activemq:
###MQ连接通讯地址
broker-url: tcp://127.0.0.1:61616
###账号
user: admin
###密码
password: admin
mail:
###163邮件服务
host: smtp.163.com
###发送邮件账号
username: apkdream@163.com
###pop协议授权码
password: xxxxxx
enable: true
smtp:
auth: true
starttls:
enable: true
required: true
###自定义队列
my_queue: springboot2.0-queue
server:
port: 8088
2.3 创建消费者类Consumer
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;
/**
* 消费者
*/
@Component
public class Consumer {
@Autowired
private JavaMailSender javaMailSender;
/**
* 幂等性
* @param msg
* @throws Exception
*/
@JmsListener(destination = "${my_queue}")
public void receive(String msg) throws Exception {
if (StringUtils.isEmpty(msg)) {
return;
}
/** 1.解析json **/
JSONObject parseObject = JSONObject.parseObject(msg);
String userName = parseObject.getString("userName");
String email = parseObject.getString("email");
sendSimpleMail(email, userName);
System.out.println("采用点对点模式,消费者成功获取到生产者的消息,msg:" + msg);
}
public void sendSimpleMail(String eamil, String userName) throws Exception {
SimpleMailMessage message = new SimpleMailMessage();
/** 邮件来自 自己发自己 **/
message.setFrom(eamil);
/** 发送给谁 **/
message.setTo(eamil);
/** 邮件标题 **/
message.setSubject("niceyoo 新邮件提醒");
/** 邮件内容 **/
message.setText("收到一批新的" + userName + "邮件!");
/** 发送邮件 **/
javaMailSender.send(message);
System.out.println("邮件发送完成," + JSONObject.toJSONString(message));
}
}
2.4 启动类AppConsumer
@SpringBootApplication
public class AppConsumer {
public static void main(String[] args) {
SpringApplication.run(AppConsumer.class, args);
}
}
3. 启动截图
3.1 生产者截图

3.2 消费者截图

3.3 ActiveMQ后台截图
- Number Of Consumers 消费者 这个是消费者端的消费者数量 ;
- Number Of Pending Messages 等待消费的消息 这个是当前未出队列的数量。可以理解为总接收数-总出队列数;
- Messages Enqueued 进入队列的消息 进入队列的总数量,包括出队列的。 这个数量只增不减 ;
- Messages Dequeued 出了队列的消息 可以理解为是消费这消费掉的数量 ;
3.4 邮件系统截图

SpringBoot整合ActiveMQ发送邮件的更多相关文章
- Web项目容器集成ActiveMQ & SpringBoot整合ActiveMQ
集成tomcat就是随项目启动而启动tomcat,最简单的方法就是监听器监听容器创建之后以Broker的方式启动ActiveMQ. 1.web项目中Broker启动的方式进行集成 在这里采用Liste ...
- SpringBoot系列八:SpringBoot整合消息服务(SpringBoot 整合 ActiveMQ、SpringBoot 整合 RabbitMQ、SpringBoot 整合 Kafka)
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringBoot 整合消息服务 2.具体内容 对于异步消息组件在实际的应用之中会有两类: · JMS:代表作就是 ...
- SpringBoot整合ActiveMQ快速入门
Spring Boot 具有如下特性: 为基于 Spring 的开发提供更快的入门体验 开箱即用,没有代码生成,也无需 XML 配置.同时也可以修改默认值来满足特定的需求. 提供了一些大型项目中常见的 ...
- 解决Springboot整合ActiveMQ发送和接收topic消息的问题
环境搭建 1.创建maven项目(jar) 2.pom.xml添加依赖 <parent> <groupId>org.springframework.boot</group ...
- SpringBoot整合ActiveMQ和开启持久化
一.点对点 1.提供者目录展示 2.导入依赖 <dependency> <groupId>org.springframework.boot</groupId> &l ...
- ActiveMQ 笔记(四)Spring\SpringBoot 整合 Activemq
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.Spring 整合Activemq 1.所需jar包 <dependencies> &l ...
- springboot整合ActiveMQ,配置问题
1.ActiveMQ的安装和相关配置修改 去官网下载安装包解压至文件夹 双击打开 打开浏览器输入 http://127.0.0.1:8161 到此activeMQ就安装好了 2.springboot工 ...
- SpringBoot整合ActiveMQ,看这篇就够了
ActiveMQ是Apache提供的一个开源的消息系统,完全采用Java来实现,因此它能很好地支持JMS(Java Message Service,即Java消息服务)规范:本文将详细介绍下Activ ...
- SpringBoot整合Mail发送邮件&发送模板邮件
整合mail发送邮件,其实就是通过代码来操作发送邮件的步骤,编辑收件人.邮件内容.邮件附件等等.通过邮件可以拓展出短信验证码.消息通知等业务. 一.pom文件引入依赖 <dependency&g ...
随机推荐
- Redis的LRU算法
Redis的LRU算法 LRU算法背后的的思想在计算机科学中无处不在,它与程序的"局部性原理"很相似.在生产环境中,虽然有Redis内存使用告警,但是了解一下Redis的缓存使用策 ...
- Excel数据都在一列,如何批量转置
Evernote Export Excel数据都在一列,如何批量转置 创建时间: 2019-10-21 星期一 13:41 作者: 苏苏 标签: excel, 转置 问题 Excel数据都 ...
- sqlalchemy 配合bootstrap-table实现后台分页
创建公共的mysql连接函数 def db_session(): db_config='mysql+mysqldb://'+ mysqluser + ':' + mysqlpassword+'@'+m ...
- English--动词语态
English|动词语态 动词的语态在理解长难句中很重要.了解被动语态与主动语态,掌握语态的变化方式. 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点的描述.力求不含任何的自我 ...
- ES6 之 对象的简写方式
简写有两条基本原则: 同名的属性可以省略不写 对象中的方法中的 : function 可以省略不写 来看下下面这个例子,我分别用ES5 和 ES6 的语法分别定义并声明了一个简单的学生对象: ES5: ...
- PHPSocket.IO知识学习整理
一.服务端和客户端连接 1.创建一个SocketIO服务端 <?php require_once __DIR__ . '/vendor/autoload.php'; use Workerman\ ...
- 模块化规范:CMD和AMD的区别
https://www.zhihu.com/question/20351507/answer/14859415 AMD(异步模块定义) 是 RequireJS 在推广过程中对模块定义的规范化产出.CM ...
- pandas 之 数据清洗-缺失值
Abstract During the course fo doing data analysis and modeling, a significant amount of time is spen ...
- Linux运维技术之讲解RAID
RAID: 独立冗余磁盘阵列 ,将多块磁盘组合起来,组合成一个阵列,当成一个逻辑设备来使用的机制! RAID级别:仅代表磁盘组织不同,没有上下之分,组合raid时,不仅要考虑速度,还要考虑可用性. 磁 ...
- Qt编译报错:The kit Desktop Qt...has configuration issues which might be the root cause for this problem.
报错:Cannot find file: E:\实验室\20180409_Qt跑马灯\QtTest\QtTest.pro. 17:03:11: 进程"D:\Qt\Qt5.8.0\5.8\ms ...