【短信注册功能】springBoot+ActiveMQ的技术

【短信注册功能】springBoot+ActiveMQ的技术
基本的业务需求是注册时短信验证码的接收,我们在业务中用的技术是SpringBoot,搭建Web应用,这里我们使用的是一个消息中间件,用于异步接收和异步发送。然后调用第三方短信的服务接口,使用的是阿里云提供的短信服务。注册的时候把这个验证码存入到Redis中,然后再把用过ActiveMQ接收到的验证码与Rredis里面的验证码进行对比, 如果对比成功就注册成功,否则注册失败。为什么要使用这个消息中间件呢?
如果我们采用的是消息中间件来推送我们的消息,当我们的客户在给服务器发送消息的时候,我们只需要将消息发送出去,经过消息中间件,至于消息中间件什么时候推送给服务器,那跟我们的客户没有什么关系,他直接返回,因为采用的是异步的处理方式,即使服务器忙碌或是出现问题,也不会影响我们消息的推送。当下次服务器启动的时候,自然可以接受到消息了。
我简单的举一个例子,比如王五要向他的上司请假,而此时他的上司正在开会,而王五又着急赶飞机,这时候要怎么办呢?他可以选择给上司打电话,可是打电话可能会导致会议终端,并不一个很好的解决方案,如果等上司开完会的话,可能就赶不上飞机了。所以此时我们选择给上司留言的方式,这样上司在开完会的时候就会看到,也不耽误他坐飞机。我们消息中间件就是这样一个解决方案。像很多平台微信也是采用这种方式的。
我们在项目中使用的消息中间件ActiveMQ首先说一下MQ,它是一个消息中间件,用于在不同系统中传递消息,对消息进行统一管理的组件。常用的有ActiveMQ,RabbitMQ,kafka。
ActiveMQ他是用Apache的开源项目,完全支持JMS的规范可以用于异步处理,系统间的解耦合,应对高并发。支持多种传输协议,支持ajax和与Spring的集成。有两种角色:生产者和消费者消息形式有两种模式:队列模式(Queue):如果生产者生产了100条信息,如果有两个消费者的话,那么每个消费者就会接收50条来处理主题模式(topic):如果生产者生产了100条信息,消费者如果没有订阅这个主题,那么他就不会接收到这100条信息。消费者只有在订阅了该主题的消息,生产者的消息才会被处理。如果两个消费者同时订阅了这个主题,两个消费者会同事分别接收这100条的消息。
操作步骤:
先在用户后台写一个生成验证码的工具类,生成这个验证码后,以他的电话号码为key值,把验证码存入到Redis的数据库中。
搭建一个SpringBoot项目,用于处理发送短信的业务处理。先在pom中引入ActiveMQ的依赖ActiveMQ和SpringBoot的集成很简单,只用引用activemq和jms的依赖在项目后台写一个controller里面定义一个方法写发送短信的代码里面包括电话号码,验证码,还有发送的目的地。
这里需要调用阿里云的短信发送功能。

关于阿里云短信api

  1. 获取阿里云的Access Key和Access Key Secret(这两个参数可以用配置文件)
  2. 创建短信模板
  3. 配置短信的接口
    3.1. 添加阿里云依赖sdk(aliyun-java-sdk-core,aliyun-java-sdk-dysmsapi)
    3.2. 配置工具类
  4. 在这个工具类里面就是用的阿里云发送短信的api 这个信息是发送到MQ中的,还要写一个ActiveMQ的监听类,这里调用阿里云发送短信的工具类把短信发出去。里面有几个参数(签名,模板,验证码)我们要配置一个MQ的消息模式,这里我们用到的是队列模式,队列模式是点对点的模式,一条消息只允许一个消费者消费。当消息通过工具类发送出去后,手机接收到这个验证码,把这个验证码传到后台进行验证码的验证。用户的后台需要写一个验证验证码的方法。把前台传来的验证码跟redis中存的那个验证码作对比,如果比对成功的话就注册成功,不对的话设置一个定时器,1分钟后再次发送验证码。

你可能感兴趣的:(技术架构类)