用户微服务-用户注册-(一)

1 需求分析

注册账号,用手机号注册,填写后发送短信验证码,填写短信验证码正确方可注册成
功。

 我们这里所做的实际上就是消息生产者。

2 新建子项目zhao588_user

    1,新建项目

  2.新建启动类和配置文件

      启动类

package com.zhao588.user;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import util.IdWorker;
@SpringBootApplication
public class UserApplication {

	public static void main(String[] args) {
		SpringApplication.run(UserApplication.class, args);
	}

	@Bean
	public IdWorker idWorkker(){
		return new IdWorker(1, 1);
	}
	
}

   配置文件,application.yml

server: 
  port: 9008
spring: 
  application:  
    name: zhao588-user #指定服务名
  datasource:  
    driverClassName: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.63.131:3306/tensquare_user?characterEncoding=UTF8
    username: root
    password: root
  jpa: 
    database: MySQL
    show-sql: true
 

3 发送短信验证码

实现思路: 在用户微服务编写 API , 生成手机验证码,存入 Redis 并发送到 RabbitMQ
3.1 准备工作
1 )因为要用到缓存和消息队列,所以在用户微服务(zhao588_user)引入依赖
redis amqp 的起步依赖。
     <dependency>
		  <groupId>org.springframework.boot</groupId>
		  <artifactId>spring-boot-starter-data-redis</artifactId>
		  <version>2.0.1.RELEASE</version>
	  </dependency>
	  <dependency>
		  <groupId>org.springframework.boot</groupId>
		  <artifactId>spring-boot-starter-amqp</artifactId>
		  <version>2.0.1.RELEASE</version>
	  </dependency>
(2)修改 application.yml , spring 节点下添加配置如下
server: 
  port: 9008
spring: 
  application:  
    name: zhao588-user #指定服务名
  datasource:  
    driverClassName: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.63.131:3306/tensquare_user?characterEncoding=UTF8
    username: root
    password: root
  jpa: 
    database: MySQL
    show-sql: true
  redis:
    host: 192.168.63.131
  rabbitmq:
    host: 192.168.63.131
3.2 代码实现
1 )在 UserService 中新增方法,用于发送短信验证码
	@Autowired
	private RedisTemplate redisTemplate;

	@Autowired
	private RabbitTemplate rabbitTemplate;

   public void sendSms(String mobile) {

		//生成六位随机数
		String checkcode = RandomStringUtils.randomNumeric(6);
        //向缓存中放一份  六小时过期             
		redisTemplate.opsForValue().set("checkcode_"+mobile,checkcode,6,TimeUnit.HOURS);
		//给用户发一份
		Map<String,String> map = new HashMap<String, String>();
		map.put("mobile",mobile);
		map.put("checkcode",checkcode);
		rabbitTemplate.convertAndSend("sms",map);
		//在控制台显示一份,方便测试
		System.out.println("验证码:"+checkcode);
	}

这里随机数 RandomStringUtils需要引入一个依赖

      <dependency>
		  <groupId>org.apache.commons</groupId>
		  <artifactId>commons-lang3</artifactId>
		  <version>3.5</version>
	  </dependency>
(2) UserController 新增方法
   /*
	* 发送短信验证码
	* */
	@RequestMapping(value = "/sendsms/{mobile}", method = RequestMethod.POST)
	 public  Result  sendSms(@PathVariable String mobile){
		userService.sendSms(mobile);
		return new Result(true,StatusCode.OK,"发送成功");
	 }
(3)启动微服务(启动docker中的rabbitmq,Redis,最后启动启动类
UserApplication),在rabbitMQ中创建名为sms的队列,测试   
a,启动docker中的rabbitmq
  docker start rabbitmq
b,启动docker中的Redis
  docker start Redis
c,在rabbitMQ中创建名为sms的队列

 d,测试

 得到验证码

4 用户注册

1)UserController增加方法
        
    /*
     * 注册用户
     * */
    @RequestMapping(value = "/register/{code}", method = RequestMethod.POST)
    public  Result  register(@PathVariable String code,@RequestBody User user){
        //得着缓存中的验证码
        String checkcodeRedis = (String) redisTemplate.opsForValue().get("checkcode_"+user.getMobile());

        if(checkcodeRedis.isEmpty()){
            return new Result(true,StatusCode.ERROR,"请先获取验证码输入");
        }
        if(!checkcodeRedis.equals(code)){
            return new Result(true,StatusCode.ERROR,"请先输入正确的验证码");
        }
        userService.add(user);
        return new Result(true,StatusCode.OK,"注册成功");
    }
(2)UserService 增加方法
         
   /**
	 * 增加
	 * @param user
	 */
	public void add(User user) {
		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);
	}

(3)重启启动类测试

 注册成功。

猜你喜欢

转载自blog.csdn.net/qq_39772439/article/details/121281578