需求:A系统调用邮件服务,B系统提供邮件服务并发送邮件
核心代码:
consumer监听器(监听activemq)
package com.ideap.listener;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.ideap.pojo.MailContent;
import com.ideap.service.MailService;
/**
* 编写监听器,专门处理消息
* @author Administrator
*
*/
@Component(value = "myListener")
public class MyMessageListener implements MessageListener{
@Autowired
private MailService mailServiceImpl;
@Override
public void onMessage(Message message) {
try {
if(message instanceof ObjectMessage){
ObjectMessage om = (ObjectMessage)message;
Object data = om.getObject();
if(data instanceof MailContent){
MailContent mailContent = (MailContent)data;
this.mailServiceImpl.sendMail(mailContent);;
}
} else {
System.out.println(message);
}
} catch (JMSException e) {
e.printStackTrace();
}
}
}
consumer 发送邮件(javaMail)
package com.ideap.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import com.ideap.pojo.MailContent;
import com.ideap.service.MailService;
@Service
public class MailContentImpl implements MailService{
@Autowired
private JavaMailSender sender;
@Autowired
private SimpleMailMessage mailMessage;
@Autowired
private ThreadPoolTaskExecutor pool;
@Override
public void sendMail(final MailContent mail) {
this.pool.execute(new Runnable() {
@Override
public void run() {
mailMessage.setTo(mail.getTo());
mailMessage.setSubject(mail.getSubject());
mailMessage.setText(mail.getContent());
sender.send(mailMessage);
}
});
}
}
producer 包装邮件信息,发送消息
package com.ideap.service.impl;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Service;
import com.ideap.pojo.MailContent;
import com.ideap.service.MessageService;
@Service
public class MessageServiceImpl implements MessageService{
@Autowired
private JmsTemplate template;
/**
* 发送消息到ActiveMQ中
* 1、需要连接(connection)对象,会话(session)对象,消息发送器(producer)对象
* 2、发送消息
* 使用spring整合JMS相关代码时,不需要定义连接,会话等资源对象。
* 使用spring提供的JMSTemplate对象实现访问
* JMSTemplate - 是spring封装的一个,专门访问MOM容器的模板对象,其中定义若干方法,实现消息的发送和接收
*
*/
@Override
public void sendMessage(String from, String to, String subject, String content) {
if(to.indexOf(";") > -1){
String[] tos = to.split(";");
for(String t : tos){
if(null == t && "".equals(t.trim())){
continue;
}
final MailContent mail= this.transfer2Mail(from, t, subject, content);
this.sendMail(mail);
}
} else {
final MailContent mail= this.transfer2Mail(from, to, subject, content);
this.sendMail(mail);
}
}
private MailContent transfer2Mail(String from, String to, String subject, String content){
MailContent mail = new MailContent();
mail.setFrom(from);
mail.setTo(to);
mail.setSubject(subject);
mail.setContent(content);
return mail;
}
private void sendMail(final MailContent mail){
template.send(new MessageCreator() {
/**
* 创建一个要发送的消息对象
* 并返回这个消息的对象
* template自动将消息对象发送到MOM容器中
*/
@Override
public Message createMessage(Session session) throws JMSException {
Message message = session.createObjectMessage(mail);
return message;
}
});
}
}
整体代码上传到gitHub上,down下来,输入自己的发送邮箱,就可以畅跑了
发邮件邮箱
有问题可留言一起交流