微服务开发项目(四)之消息中间件RabbitMQ

博客待补充

一.windows环境下的安装

Rabbit MQ是由Eralng语言开发的,因此在使用Rabbit MQ之前需要安装Eralng环境。
参见博客win 10 下RabbitMQ的安装与配置

地址输入http://127.0.0.1:15672访问,用户名和密码,都为guest。
微服务开发项目(四)之消息中间件RabbitMQ_第1张图片

二.RabbitMQ简介

1.参看文章:一个故事告诉你什么是消息队列

四.用户微服务模块tensquare_user之用户注册

需求: 注册账号,用手机号注册,填写后发送短信验证码,填写短信验证码正确方可注册成功。
实现思路: 生成手机验证码,存入Redis并发送到RabbitMQ。

1.pom.xml中添加依赖:

		
		<dependency>
			<groupId>com.tensquaregroupId>
			<artifactId>tensquare_commonartifactId>
			<version>0.0.1-SNAPSHOTversion>
		dependency>
		
		<dependency>
			<groupId>mysqlgroupId>
			<artifactId>mysql-connector-javaartifactId>
			<scope>runtimescope>
		dependency>
		
		<dependency>
			<groupId>com.baomidougroupId>
			<artifactId>mybatis-plus-boot-starterartifactId>
			<version>3.1.0version>
		dependency>
		
		<dependency>
			<groupId>org.springframework.bootgroupId>
			<artifactId>spring-boot-starter-data-redisartifactId>
			<version>2.2.1.RELEASEversion>
		dependency>
		
		<dependency>
			<groupId>org.apache.commonsgroupId>
			<artifactId>commons-pool2artifactId>
		dependency>
		
		<dependency>
			<groupId>org.springframework.bootgroupId>
			<artifactId>spring-boot-starter-amqpartifactId>
		dependency>

2.application.properties中添加:

#Redis相关配置以及lettuce pool配置
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.lettuce.pool.max-active=7
spring.redis.lettuce.pool.max-idle=7
spring.redis.lettuce.pool.min-idle=2
spring.redis.lettuce.pool.max-wait=-1ms
spring.redis.lettuce.shutdown-timeout=200ms

#rabbitmq相关配置
spring.rabbitmq.host=localhost

3.编写UserDao接口

@Mapper
public interface UserDao extends BaseMapper<User> {
}

4.编写UserService

@Service
public class UserService extends ServiceImpl<UserDao, User> {
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
     * 发送短信验证码
     * @param mobile
     */
    public void sendSms(String mobile) {
        //1.生成6位短信验证码
        int code = new Random().nextInt(999999);
        if (code < 100000) {
            code = code + 100000;
        }
        System.out.println(mobile + "收到的验证码是: " + code);
        //2.将生成的验证码放入redis(5分钟过期)
        redisTemplate.opsForValue().set("smsCode_" + mobile, code + "", 5, TimeUnit.MINUTES);
        //3.将验证码和手机号发送到rabbitMQ中
        HashMap<String, String> map = new HashMap<>();
        map.put("mobile", mobile);
        map.put("code", code + "");
        rabbitTemplate.convertAndSend("sms", map);
    }

    /**
     * 用户注册
     * @param user
     * @param code  用户填写的验证码
     */
    public void add(User user, String code) {
        //1.从缓存中提取验证码
        String verifyCode = redisTemplate.opsForValue().get("smsCode_" + user.getMobile());
        if(verifyCode == null){
            throw new RuntimeException("请点击获取短信验证码!");
        }
        //2.判断验证码是否输入正确
        if(!verifyCode.equals(code)){
            throw new RuntimeException("验证码输入不正确!");
        }
        //3.插入
        baseMapper.insert(user);
    }
}

5.编写UserController

@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;
    @Autowired
    private IdWorker idWorker;

    /**
     * 获取短信验证码
     * @param mobile
     * @return
     */
    @RequestMapping(value = "/sendsms/{mobile}", method = RequestMethod.POST)
    @ResponseBody
    public Result sendSms(@PathVariable String mobile) {
        userService.sendSms(mobile);
        return new Result(true, StatusCode.OK, "发送成功");
    }

    /**
     * 用户注册
     * @return
     */
    @RequestMapping(value = "/register/{code}", method = RequestMethod.POST)
    @ResponseBody
    public Result register(@RequestBody User user, @PathVariable String code) {
        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());   //最后登录日期
        userService.add(user, code);
        return new Result(true, StatusCode.OK, "注册成功");
    }
}

五.访问http://127.0.0.1:15672,在rabbitMQ中创建名为sms的队列

六.使用postman测试api

你可能感兴趣的:(微服务开发项目一)