SpringCloud+Vue中应用阿里大鱼短信发送案例

整体流程示意图:
在这里插入图片描述

  1. 输入电话号码,点击发送验证码
  2. 后台接收请求将电话号码和随机生成的验证码保存RabbitMQ和Redis中
  3. RabbitMQ真实发送短信验证码
  4. 输入验证码点击注册按钮
  5. 后台接收请求,判断验证码是否正确,正确将数据保存mysql返回注册成功,不正确返回注册失败

代码地址:
链接:https://pan.baidu.com/s/1raBVa_FL0K1EcCtRhN6xEA
提取码:yyds
在这里插入图片描述
这两个模块中代码是新加的

user-service1987模块

配置文件

bootstrap.yml

spring:
  #配置mysql地址
  datasource:
    url: jdbc:mysql://localhost:3306/tb_user?useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
  #配置RabbitMQ地址
  rabbitmq:
    host: 192.168.88.130 # rabbitMQ的ip地址
    port: 5672 # 端口
    username: root
    password: 123456
    virtual-host: /
    listener:
      simple:
        prefetch: 1
  #配置Redis的地址
  redis:
    database: 0
    host: localhost
    port: 6379
    jedis:
      pool:
        max-wait: -1
        max-idle: 8
        max-active: 8
        min-idle: 0
  application:
    name: userservice
  profiles:
    active: dev
  cloud:
    nacos:
      server-addr: localhost:8848
      config:
        file-extension: yaml
server:
  port: 9000
mybatis:
  type-aliases-package: com.czxy.brand.domain
  configuration:
    map-underscore-to-camel-case: true
logging:
  level:
    cn.itcast: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS

控制器controller

import cn.itcast.domain.User;
import cn.itcast.util.RandomNumberUtils;
import cn.itcast.vo.BaseResult;
import com.czxy.user.service.UserService;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * @ClassName UserController
 * @Description TODO
 * @Author Administrator
 * @date 2021-11-24 16:27
 */
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    UserService userService;

    @Autowired
    private RabbitTemplate rabbitTemplate;
    @Autowired
    private StringRedisTemplate redisTemplate;

    /**
     * 点击发送验证码按钮
     * @param phone
     * @return
     */
    @GetMapping("sendSms")
    public BaseResult register(String phone){
        String queueName = "sms.queue";
        //生成6位数的验证码
        String code = RandomNumberUtils.code();//自己写的工具类随机生成6位随机数
        //组装数据
        String message = phone + ":" + code;
        //将电话号码和验证码保存到RabbitMQ中
        rabbitTemplate.convertAndSend(queueName,message);
        //将电话号码和验证码保存到redis中
        redisTemplate.opsForValue().set(phone,code,1, TimeUnit.MINUTES);
        return BaseResult.ok("验证码发送成功");
    }

    /**
     * 点击注册按钮将数据保存mysql
     * @param user
     * @return
     */
    @PostMapping("/register")
    public BaseResult insertUser(@RequestBody User user){
        //获取redis中的验证码
        String redisCode = redisTemplate.opsForValue().get(user.getMobile());
        if (redisCode==null){
            return BaseResult.error("注册失败");
        }
        if (redisCode.equals(user.getCode())){
            user.setNickname(user.getUsername());
            Boolean flag = userService.insertUser(user);
            if (flag){
                return  BaseResult.ok("添加成功");
            }else{
                return BaseResult.error("添加失败");
            }
        }
        return BaseResult.error("注册失败");
    }

    /**
     * 查询所有
     * @return
     */
    @GetMapping("/selectAll")
    public BaseResult selectAll(){
        List<User> list = userService.selectAll();
        return  BaseResult.ok("成功",list);
    }

    /**
     * 根据id查询数据
     * @param id
     * @return
     */
    @GetMapping("/selectById/{id}")
    public User findByIdUser(@PathVariable("id") Integer id){
        User user = userService.findByIdUser(id);
        return user;
    }
}

service层代码

import cn.itcast.domain.User;
import com.czxy.user.dao.UserDao;
import com.czxy.user.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @ClassName UserServiceImpl
 * @Description TODO
 * @Author Administrator
 * @date 2021-11-24 16:28
 */
@Service
@Transactional
public class UserServiceImpl implements UserService {
    @Autowired
    UserDao userDao;

    @Override
    public List<User> selectAll() {
        return userDao.selectAll();
    }

    @Override
    public User findByIdUser(Integer id) {
        return userDao.selectByPrimaryKey(id);
    }

    @Override
    public Boolean insertUser(User user) {
        return userDao.insertUser(user);
    }
}

Dao持久层

import cn.itcast.domain.User;
import org.apache.ibatis.annotations.Insert;
import tk.mybatis.mapper.common.Mapper;

/**
 * @ClassName UserDao
 * @Description TODO
 * @Author Administrator
 * @date 2021-11-24 16:28
 */
@org.apache.ibatis.annotations.Mapper
public interface UserDao extends Mapper<User> {
    @Insert("insert into `t_user`(id,username,nickname,password,mobile) values(null,#{username},#{nickname},#{password},#{mobile})")
    Boolean insertUser(User user);
}

import org.springframework.amqp.core.Queue;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;


/**
 * @ClassName UserApplication
 * @Description TODO
 * @Author Administrator
 * @date 2021-11-24 16:46
 */
@SpringBootApplication
public class UserApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserApplication.class,args);
    }
    @Bean
    public Queue queue(){
        return new Queue("sms.queue");
    }
}

consumer-consumer1987模块

配置文件

application.yml

server:
  port: 20000
spring:
  rabbitmq:
    host: 192.168.88.130 # rabbitMQ的ip地址
    port: 5672 # 端口
    username: root
    password: 123456
    virtual-host: /

短信的代码

发送短信的代码在阿里云上有发送短信的接口直接可以拷贝

消费RabbitMQ中的数据

import com.czxy.utils.SendSmsUtil;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import java.time.LocalTime;

/**
 * @ClassName SpringRabbitConsumer
 * @Description TODO
 * @Author Administrator
 * @date 2021-12-03 15:15
 */
@Component
public class SpringRabbitConsumer {
    @RabbitListener(queues = "sms.queue")
    public void listenWorkQueue(String msg) throws InterruptedException {
        String[] msgs = msg.split(":");
        SendSmsUtil.send(msgs[0], msgs[1]);
        System.out.println("消费者接收到消息:【" + msgs[0] + ":" + msgs[1] + "】" + LocalTime.now());

    }
}

启动器

import org.springframework.amqp.core.Queue;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

/**
 * @ClassName ConsumerApplication
 * @Description TODO
 * @Author Administrator
 * @date 2021-12-03 15:06
 */
@SpringBootApplication
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class,args);
    }
    @Bean
    public Queue queue(){
        return new Queue("sms.queue");
    }
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值