0%

Artemis

Spring Boot集成Artemis

什么是Artemis?

Artemis是神啊

Artemis是一个JMS产品。

准备工作

下载并安装ARTEMIS,在项目根目录创建存储数据的目录文件,并启动Artemis服务器。

添加Maven依赖项

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-artemis</artifactId>
</dependency>

配置

1
2
3
4
5
6
7
8
9
10
spring:
artemis:
# 指定连接外部Artemis服务器,而不是启动嵌入式服务:
mode: native
# 服务器地址和端口号:
host: 127.0.0.1
port: 61616
# 连接用户名和口令由创建Artemis服务器时指定:
user: ???
password: ????

利用Artemis发送注册成功的邮件

Producer

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package eternal.fire.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Component;

@Component
public class MessagingService {
JmsTemplate jmsTemplate;
MailService mailService;

@Autowired
public MessagingService(JmsTemplate jmsTemplate, MailService mailService) {
this.jmsTemplate = jmsTemplate;
this.mailService = mailService;
}

public void sendMailRegisterMessage(String email) {
jmsTemplate.send("jms/queue/mail",session -> session.createTextMessage(email));
}
}

Consumer

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package eternal.fire.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

import javax.mail.MessagingException;

@Component
public class MailMessageListener {
MailService mailService;

@Autowired
public MailMessageListener(MailService mailService) {
this.mailService = mailService;
}

@JmsListener(destination = "jms/queue/mail", concurrency = "10")
public void onMessageReceived(String email) throws MessagingException {
mailService.sendRegisterMail(email);
}
}

MailService

关于MailService可以参考我上一篇文章:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package eternal.fire.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMailMessage;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

@Component
public class MailService {
JavaMailSender javaMailSender;

@Autowired
public MailService(JavaMailSender javaMailSender) {
this.javaMailSender = javaMailSender;
}

public void sendRegisterMail(String email) throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage);
mimeMessageHelper.setFrom("674602921@qq.com");
mimeMessageHelper.setTo(email);
mimeMessageHelper.setSubject("Register successfully");
mimeMessageHelper.setText("Congratulations! You have registered successfully");
javaMailSender.send(mimeMessage);
}
}

UserService逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public User register(String email, String password, String name) {
log.info("try to register by {}", email);
User user = new User(email, password, name, System.currentTimeMillis());
KeyHolder keyHolder = new GeneratedKeyHolder();
try {
jdbcTemplate.update(connection -> {
var ps = connection.prepareStatement("INSERT INTO users(email,password,name,createdAt) VALUES (?,?,?,?)", Statement.RETURN_GENERATED_KEYS);
ps.setObject(1, user.getEmail());
ps.setObject(2, user.getPassword());
ps.setObject(3, user.getName());
ps.setObject(4, user.getCreatedAt());
return ps;
}, keyHolder);
} catch (DataAccessException e) {
throw new RuntimeException("Register failed");
}
messagingService.sendMailRegisterMessage(user.getEmail());
user.setId(Objects.requireNonNull(keyHolder.getKey()).longValue());
return user;

总结

阿尔忒弥斯(希腊语:Ἄρτεμις、英语:Artemis),又名辛西亚,是古希腊神话中的狩猎女神和接生之神,同时也是野兽的女主人与荒野的女领主,奥林匹斯十二主神之一。还是宙斯勒托之女,是阿波罗的孪生姐姐。 [1]

阿尔忒弥斯自由独立,热爱野外生活,反对男女婚姻。她喜欢的是不嫁的处女们,以及那些蔑视阿佛洛狄忒的青年,她与赫斯提亚雅典娜被视为奥林匹斯山上的三处女神

她从小就向父亲宙斯许诺做永远的处女,同时索要弓箭、所有的山脉和20个给她保养猎靴的宁芙侍女。在林莽和山野间,阿尔忒弥斯手持弓箭,由猎狗伴随,与侍奉她的众仙女以狩猎为乐。她很喜欢金角鹿,并抓到这种鹿给她拉车。 [2]

阿尔忒弥斯因被命运女神选为接生神,于是便向宙斯索取主管接生新生儿的权力。她是古希腊人祭祀最多的神祇之一。世界七大奇迹之一的阿尔忒弥斯神庙就是专门为她修建的。

参考

https://www.liaoxuefeng.com/wiki/1252599548343744/1282388602650658