ActivemMQ之消息服务器平台(发邮件)

Posted toov5

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ActivemMQ之消息服务器平台(发邮件)相关的知识,希望对你有一定的参考价值。

消息服务平台 处理公司内部各种消息业务

  比如 发送邮件  发送短信  微信推送 

  接口有两种类型 异步 同步

 

 

同步需求: 当调用消息服务平台,需要返回消息服务平台调用第三方平台接口是否成功

异步需求: 采用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!

 

以上是关于ActivemMQ之消息服务器平台(发邮件)的主要内容,如果未能解决你的问题,请参考以下文章

发邮件时提示这个错误是啥意思,邮件也收不到别人邮件了

springboot+activemq中引入重发机制

第三篇之消息的收发

MQ消息队列在软件开发中的作中

(转)postfix疯狂外发垃圾邮件之分析与解决

PHP中利用PHPMailer配合QQ邮箱实现发邮件