ActiveMQ之消息服务器平台【发邮件】
消息服务平台 处理公司内部各种消息业务
比如 发送邮件 发送短信 微信推送
接口有两种类型 异步 同步
同步需求: 当调用消息服务平台,需要返回消息服务平台调用第三方平台接口是否成功
异步需求: 采用MQ异步发送消息(没有返回结果)
我用world画了个示意图:大家看下
发送邮件参数:
邮件账号 内容信息
格式是JSON
需要使用 fastJson:
<!--fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.49</version> </dependency>
存入消息: 消息参数格式是Json 所以需要 fastjson
package com.toov5.Producer; import javax.jms.Queue; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jms.core.JmsMessagingTemplate; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import com.alibaba.fastjson.JSONObject; @Component public class P2PProducer { @Autowired private JmsMessagingTemplate jmsMessagingTemplate; //把队列注入进来 @Autowired //此注解默认是以类型找 在配置文件中 已经注入的 @Bean private Queue queue; //每隔5s时间向队列发送消息 @Scheduled(fixedDelay=5000) //每间隔2s向队列发送消息 public void send() { String userName = System.currentTimeMillis()+" "; JSONObject jsonObject = new JSONObject(); jsonObject.put("username", userName); jsonObject.put("email", "acmgogo@163.com"); String msgString = jsonObject.toJSONString(); jmsMessagingTemplate.convertAndSend(queue,msgString); System.out.println("点对点通讯,msg"+msgString); } }
主要的依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
注意163邮件需要开通pop3协议!
其他遵循之前 点对点demo
package com.toov5.Producer; import javax.jms.Queue; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jms.core.JmsMessagingTemplate; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import com.alibaba.fastjson.JSONObject; @Component public class P2PProducer { @Autowired private JmsMessagingTemplate jmsMessagingTemplate; //把队列注入进来 @Autowired //此注解默认是以类型找 在配置文件中 已经注入的 @Bean private Queue queue; //每隔5s时间向队列发送消息 @Scheduled(fixedDelay=5000) //每间隔2s向队列发送消息 public void send() { String userName = System.currentTimeMillis()+" "; JSONObject jsonObject = new JSONObject(); jsonObject.put("username", userName); jsonObject.put("email", "acmtest@163.com"); String msgString = jsonObject.toJSONString(); jmsMessagingTemplate.convertAndSend(queue,msgString); System.out.println("点对点通讯,msg"+msgString); } }
配置:
package com.toov5.config; import javax.jms.Queue; import org.apache.activemq.command.ActiveMQQueue; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; @Component public class ConfigQueue { @Value("${my_queue}") private String myQueue; //首先将队列注入到SpringBoot容器中去 @Bean public Queue queue() { return new ActiveMQQueue(myQueue); } }
启动:
package com.toov5; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication @EnableScheduling //开启定时任务 public class AppProducer { public static void main(String[] args) { SpringApplication.run(AppProducer.class, args); } }
yml:
spring: activemq: broker-url: tcp://192.168.91.6:61616 user: admin password: admin my_queue: springboot-queue-toov5 server: port: 8081
pom:
<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.toov5.springboot.avtivemq</groupId> <artifactId>springboot.avtivemq</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> <!--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>
consumer:
package com.toov5.activemqConsumer; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.jms.annotation.JmsListener; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Component; import com.alibaba.fastjson.JSONObject; @Component public class P2PConsumer { @Autowired private JavaMailSender javaMailSender; @Value("${spring.mail.username}") private String toEmail; @JmsListener(destination = "${my_queue}") // 用这个注解去监听 监听的队列 public void receiver(String msg) throws Exception { if (StringUtils.isEmpty(msg)) { return; } // 解析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 email, String userName) throws Exception { SimpleMailMessage message = new SimpleMailMessage(); // 邮件的来源 自己发自己 message.setFrom(email); // 发送给谁 message.setTo(toEmail); // 邮件标题 message.setSubject("toov5博客园提醒"); // 邮件内容 message.setText("hello:" + userName + "我们成为好朋友!"); // 发送邮件 javaMailSender.send(message); System.out.println("邮件发送完成," + JSONObject.toJSONString(message)); } }
启动类:
package com.toov5.activemqConsumer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class AppConsumer { public static void main(String[] args) { SpringApplication.run(AppConsumer.class, args); } }
yml:
spring: activemq: broker-url: tcp://192.168.91.6:61616 user: admin password: admin mail: ##163邮件服务 host: smtp.163.com ##发送邮件账号 username: acmchangyuan@163.com ##授权码 password: yugongv5 enable: true smtp: auth: true starttls: enable: true required: true my_queue: springboot-queue-toov5 server: port: 8080
pom:
<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.toov5.activemqConsumer</groupId> <artifactId>activemqConsumer</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> <!--fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.49</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </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> </project>
先启动consumer!