Maven地址:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
邮箱:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
邮箱配置:
mail:
host: smtp.163.com
username: y15014502460@163.com
password: yhm15014502460
enable: true
smtp:
auth: true
starttls:
enable: true
required: true
详细配置:(aplication.yml)
#activeMQ地址
spring.activemq.broker-url=tcp://127.0.0.1:61616
#activeMQ用户名,根据实际情况配置
spring.activemq.user=admin
#activeMQ密码,根据实际情况配置
spring.activemq.password=admin
#是否启用内存模式(也就是不安装MQ,项目启动时同时也启动一个MQ实例)
spring.activemq.in-memory=false
#信任所有的包
spring.activemq.packages.trust-all=true
#如果是点对点(queue),那么此处默认应该是false,如果发布订阅,那么一定设置为true
spring.jms.pub-sub-domain=true
优缺点:
优点是:
支持多种语言编写客户端;
对spring的支持,很容易和spring整合 ;
支持多种传输协议:TCP,SSL,NIO,UDP等 ;
支持AJAX ;
非常成熟,功能强大,在早些年业内大量的公司以及项目中都有应用 ;
单机吞吐量:万级
时效性:ms级
可用性:高,基于主从架构实现高可用性
消息可靠性:有较低的概率丢失数据
功能支持:MQ领域的功能极其完备
缺点是
偶尔会有较低概率丢失消息;
现在社区以及国内应用都越来越少,官方社区现在对ActiveMQ 5.x维护越来越少,几个月才发布一个版本;
核心代码:
实现:
@Slf4j
@Service
public class MailService implements MessageAdapter {
@Value("${msg.subject}")
private String subject;
@Value("${msg.text}")
private String text;
@Autowired
private JavaMailSender mailSender; // 自动注入的Bean
@Override
public void sendMsg(JSONObject body) {
String mail = body.getString("email");
if (StringUtils.isEmpty(mail)) {
return;
}
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
// 发送
simpleMailMessage.setFrom(mail);
simpleMailMessage.setTo(mail);
// 标题
simpleMailMessage.setSubject(subject);
// 内容
simpleMailMessage.setText(text.replace("{}", mail));
mailSender.send(simpleMailMessage);
}
}
统一接口:
public interface MessageAdapter {
public void sendMsg(JSONObject body);
}
异步执行:
@Slf4j
@Component
public class ConsumerDistribute {
@Autowired
private MailService mailService;
private MessageAdapter messageAdapter;
@JmsListener(destination = "messages_queue")
public void distribute(String json) {
log.info("####ConsumerDistribute###distribute() 消息服务平台接受 json参数:" + json);
if (StringUtils.isEmpty(json)) {
return;
}
JSONObject jsonObecjt = new JSONObject().parseObject(json);
JSONObject header = jsonObecjt.getJSONObject("header");
String interfaceType = header.getString("interfaceType");
if (StringUtils.isEmpty(interfaceType)) {
return;
}
if (interfaceType.equals(Constants.MSG_EMAIL)) {
messageAdapter = mailService;
}
if (messageAdapter == null) {
return;
}
JSONObject body = jsonObecjt.getJSONObject("content");
messageAdapter.sendMsg(body);
}
}