用户微服务
用户微服务代码生成(省略)
注意修改application
配置文件。
用户注册
需求:注册账号,用手机号注册,填写后发送短信验证码,填写短信验证码正确方可注册成功。
思路:在用户微服务编写API ,生成手机验证码,存入Redis并发送到RabbitMQ
准备工作
引入依赖
1
2
3
4
5
6
7
8<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>配置application.yml
1
2
3
4
5
6
7spring:
redis:
host: 192.168.136.104
port: 6379
rabbitmq:
host: 192.168.136.104
port: 5672
短信验证码发送
UserController新增方法
1
2
3
4
5
6
7
8
9
10/**
* 发送短信验证码
*
* @param mobile
*/
"/sendsms/{mobile}", method = RequestMethod.POST) (value =
public Result sendsms(@PathVariable String mobile) {
userService.sendSms(mobile);
return new Result(true, StatusCode.OK, "发送成功");
}UserService新增方法
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
private RedisTemplate redisTemplate;
private RabbitTemplate rabbitTemplate;
/**
* 发送短信验证码
*
* @param mobile 手机号
*/
public void sendSms(String mobile) {
//1.生成6位短信验证码
Random random = new Random();
int max = 999999;//最大数
int min = 100000;//最小数
int code = random.nextInt(max);//随机生成
if (code < min) {
code = code + min;
}
System.out.println(mobile + "收到验证码是:" + code);
//2.将验证码放入redis
redisTemplate.opsForValue().set("smscode_" + mobile, code + "", 5,
TimeUnit.MINUTES);//五分钟过期
//3.将验证码和手机号发动到rabbitMQ中
Map<String, String> map = new HashMap();
map.put("mobile", mobile);
map.put("code", code + "");
rabbitTemplate.convertAndSend("sms", map);
}
注册
UserController新增方法
1
2
3
4
5
6
7
8
9
10
11/**
* 用户注册
*
* @param user
*/
"/register/{code}", method = RequestMethod.POST) (value =
public Result register(@RequestBody User user, @PathVariable String
code) {
userService.add(user, code);
return new Result(true, StatusCode.OK, "注册成功");
}UserService新增方法
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/**
* 增加
*
* @param user 用户
* @param code 用户填写的验证码
*/
public void add(User user, String code) {
//判断验证码是否正确
String syscode = (String) redisTemplate.opsForValue().get("smscode_" + user.getMobile());
//提取系统正确的验证码
if (syscode == null) {
throw new RuntimeException("请点击获取短信验证码");
}
if (!syscode.equals(code)) {
throw new RuntimeException("验证码输入不正确");
}
user.setId(idWorker.nextId() + "");
user.setFollowcount(0);//关注数
user.setFanscount(0);//粉丝数
user.setOnline(0L);//在线时长
user.setRegdate(new Date());//注册日期
user.setUpdatedate(new Date());//更新日期
user.setLastdate(new Date());//最后登陆日期
userDao.save(user);
}
短信微服务
短信微服务参考我的另一篇文章: