文章目录
注:【网页版】右上方的悬浮框( 有目录索引 )
一、前景摘要
1-1】QQ 邮箱设置
1-2】Linux 开启 MyRabbitMQ 服务
二、代码
2-1】yml 配置信息
spring:
datasource:
url: jdbc:mysq:///shiro?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
password: root
username: root
hikari:
maximum-pool-size: 200
minimum-idle: 10
jackson:
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
default-property-inclusion: non_null
mail:
host: smtp.qq.com
username: # 输入你要发消息的邮箱 例:24****2@qq.com
password: # 输入你授权码
default-encoding: utf-8
rabbitmq:
host: 192.168.0.111
port: 5672
username: admin
password: admin
server:
port: 8080
mybatis:
mapper-locations: classpath:mapper/*.xml
configuration:
call-setters-on-nulls: true
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
2-2】controller 层
@RestController
@CrossOrigin
@RequestMapping(value = "/user")
public class UserController {
@Resource
private UserService userService;
@PostMapping(value = "/add")
public Map addOneInfo(
@RequestParam Map map){
return userService.addOneInfo(map);
}
@GetMapping(value = "/active/{uid}")
public Map activeOneUser(
@PathVariable(value = "uid") BigInteger uid){
return userService.activeOneUser(uid);
}
}
2-3】简单业务层
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Resource
private UserMapper mapper;
@Resource
private RabbitTemplate rabbitTemplate;
private HashMap<Object, Object> returnMap = new HashMap<>();
@Override
public Map addOneInfo(Map map) {
System.out.println(map);
if(mapper.addOneInfo(map)==1){
// 新用户信息添加至数据库成功,则返回成功信息
// 给路由交换机,发送一条信息.
returnMap.put("code",100);
returnMap.put("info","添加成功");
rabbitTemplate.convertAndSend("directExchange","aa",map);
} else {
returnMap.put("code",200);
returnMap.put("info","添加失败");
}
return returnMap;
}
@Override
public Map activeOneUser(BigInteger uid) {
if(mapper.updateOneInfoById(uid)==1){
returnMap.put("code",100);
returnMap.put("info","邮箱成功激活");
} else {
returnMap.put("code",200);
returnMap.put("info","邮箱激活失败");
}
return returnMap;
}
}
2-4】配置消息队列 和 交换机
@Configuration
public class MsgConfig {
@Bean
public Queue directQueue(){
return new Queue("directQueue");
}
@Bean
public DirectExchange directExchange(){
return new DirectExchange("directExchange");
}
// 通过 路由键,将消息队列绑定到 路由 上
@Bean
public Binding binding3(Queue directQueue, DirectExchange directExchange){
return BindingBuilder.bind(directQueue).to(directExchange).with("aa");
}
}
2-5】配置监听
@Value("${spring.mail.username}")
private String from;
@Resource
private JavaMailSender mailSender;
@RabbitListener(queues="directQueue")
public void getMsg5(Map map){
// 负责监听消息队列信息,监听到信息,则发送一链接至对方邮箱,点击链接可以激活邮箱
System.out.println("监听到消息:"+map);
// 新添加用户 id
BigInteger uid = (BigInteger) map.get("uid");
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper;
try {
helper = new MimeMessageHelper(message,true);
helper.setFrom(from);
helper.setTo((String) map.get("email"));
helper.setSubject("激活邮箱");
helper.setText("<a href='http://localhost:8080/user/active/"+uid+"'>激活邮箱</a>",true);
mailSender.send(message);
} catch (MessagingException e) {
System.err.println("邮件发送失败");
e.printStackTrace();
}
}