day14 RabbitMq消息队列学习与注册案例应用

本文介绍了RabbitMQ的安装启动过程,详细讲解了工作队列的五种模式,包括简单模式、发布/订阅模式、路由模式和通配符模式。在用户注册场景中,通过工作队列模式,用户服务发送验证码到RabbitMQ,短信服务消费并调用阿里云通信发送短信。同时,文章提供了后端代码实现和前端表单交互的细节,以及阿里云通信的API集成步骤。
摘要由CSDN通过智能技术生成

2021年2月4日 天气晴
本次学习笔记:1.RabbitMq 安装与启动 2.RabbitMq发送与接受消息模式

回顾

RabbitMQ安装与启动

(1)下载并安装 Eralng
配套软件中已提供otp_win64_20.2.exe
(2)下载并安装rabbitmq
配套软件中已提供rabbitmq-server-3.7.4.exe。双击安装,
注意不要安装在包含中文和空格的目录下!!!!!!!!!!!!!!!!!
安装后window服务中就存在rabbitMQ了,并且是启动状态。
(3)安装管理界面(插件)
进入rabbitMQ安装目录的sbin目录,输入命令
rabbitmq‐plugins enable rabbitmq_management
(4)重新启动服务
(5)打开浏览器,地址栏输入http://127.0.0.1:15672 ,即可看到管理界面的登陆页

RabbitMq工作队列模式5种

  1. 简单模式

在这里插入图片描述

  1. Work Queues
    应用场景:任务过多或者任务过重情况使用工作队列可提高任务处理速度

在这里插入图片描述

  1. Pub/Sub发布者订阅者模式
    在这里插入图片描述
    只负责转发消息,不具备存储,没有任何队列与Exchange匹配或者没有符合规则的队列,消息会丢失
  2. Routing路由模式
    在这里插入图片描述
    队列与交换机的绑定,不是任意绑定,需要制定一个routingKey,Exchange不再把消息交给每一个绑定队列,交换机根据指定的key进行判断
  3. Topics通配符模式
    在这里插入图片描述

在使用绑定ROUTINGkey时使用通配符
RoutingKey一般由一个或多个单词组成。多个单词用“.”
需求分析:
用户注册
注册账号,用手机号注册,通过发送手机短信验证码,填写正确的验证码,注册成功
在这里插入图片描述
发送短信验证码逻辑:
1.用户服务将验证码发给rabbitmq和redis
2.短信服务将消息从rabbitmq中取出来,调用阿里云通信发送短信
3.阿里云通信整合了三大运营商的短信网关,最终将验证码以短信发送给用户手机

该rabbitMQ模式为直接模式 用户服务为生产者 短信服务为消费者
在这里插入图片描述
注册逻辑:注册时,从redis中提取短信验证码,与用户填写的验证码对比,一致则可以注册,否则拦截

后端代码

首先生成用户服务,并添加到当前工程

发送验证码到MQ
实现思路:用户服务编写API,生成手机验证码,发送到RabbitMQ和redis.
1)用到消息队列,所以用户服务引入rabbit与spring的整合依赖

<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring‐rabbit</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>

2)添加配置文件applicationContext-rabbitmq-producer.xml

<?xml version="1.0" encoding="UTF‐8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema‐instance"
xmlns:rabbit="http://www.springframework.org/schema/rabbit"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring‐beans.xsd
http://www.springframework.org/schema/rabbit
http://www.springframework.org/schema/rabbit/spring‐rabbit.xsd">
<!‐‐连接工厂‐‐>
<rabbit:connection‐factory id="connectionFactory" host="127.0.0.1"
port="5672" username="guest" password="guest" />
<rabbit:admin connection‐factory="connectionFactory"></rabbit:admin>
<!‐‐创建队列‐‐>
<rabbit:queue name="queue.sms" />
<rabbit:template id="rabbitTemplate" connection‐
factory="connectionFactory" />
</beans>

3)在UserService中新增方法定义

/**
* 发送短信验证码
* @param mobile
*/
public void sendSms(String phone);

4)UserServiceImpl方法实现

@Autowired
private RedisTemplate redisTemplate;
@Autowired
private RabbitTemplate rabbitTemplate;
/**
* 发送短信验证码
* @param phone
*/
public void sendSms(String phone){
   
//1.得到六位短信验证码
int max=999999;
int min=100000;
Random random = new Random();
int code = random.nextInt(max);
if(code<min){
   
code=code+min;
}
System.out.println("短信验证码:"+code);
//2.保存到redis里
redisTemplate.boundValueOps("code_"+phone).set(code+"");//指定时间后设置号码为空
redisTemplate.boundValueOps("code_"+phone).expire(5,
TimeUnit.MINUTES);//5分钟失效
//3.发送给RabbitMQ
Map<String,String> map=new HashMap();
map.put("phone"
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZrZrZr.l

您的打赏是我的鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值