14、SpringCloud -- WebSocket 实时通知用户

实时通知用户

需求:

用户订单秒杀成功之后,对用户进行秒杀成功通知。
弹出个提示框来提示。

代码:

前端:

在这里插入图片描述

后端:

因为前端多携带了一个uuid作为标识,现在需要修改下涉及到的参数
在这里插入图片描述
这个类是来消费MQ里面的消息的,得到消息后进行秒杀操作。

现在在秒杀操作之后,再往MQ发送一个消息,让websocket来监听这个消息,然后通知用户是否秒杀成功。

在这里插入图片描述

后面发现这个发送同步消息没有放到try里面去,得注意,不然下单失败还能发送延迟消息

在这里插入图片描述

WebSocket

创建 websocket-server 服务

在这里插入图片描述

添加依赖:

在这里插入图片描述

配置 yml 和 启动类:

在这里插入图片描述

前端:

这里就在用户点击秒杀后,把消息发送到MQ,然后这边提示在抢购中,然后创建一个websocket连接。

在这里插入图片描述

后端代码:

开启websocket支持的配置类
在这里插入图片描述

一些http协议服务,这个类具体作用后面可以百度
在这里插入图片描述

消费消息用到的常量
在这里插入图片描述

这个是消费类,消费MQ里面的消息的

通过注解上的那些标签和topic辨别出这个类要消费MQ里面的哪条消息,然后把消息里面的结果通过websocket发送给客户端

在这里插入图片描述
在这里插入图片描述

注意:

在这里插入图片描述

测试:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这里睡眠2秒的目的。
在这里插入图片描述

测试后一切正常,符合期望,websocket使用成功。

总结:

websocket里面也是写了一个类来消费MQ的消息,消费到消息之后,把消息返回给客户端。

返回给客户端的方式:通过配置websocket配置类和server类,然后在消费类这里根据主题、标签等标识获取到对应的消息之后,根据uuid获取到对应的客户端,把秒杀的数据返回给客户端

让用户登录时产生一个uuid,在点击秒杀时把uuid携带上,把秒杀数据发送到MQ中,消息就包含有uuid。

在这里插入图片描述

详细总结:

1、用户登录的时候,就写一个生成uuid的方法

2、用户点击秒杀的时候,把uuid作为参数传递过去。

3、点击秒杀后,把秒杀的数据(用户id,商品的秒杀id,uuid)发送到MQ消息队列里面。

4、写一个消费MQ消息的消费类,实现RocketMQListener类,重写onMessage方法(这个onMessage在启动服务后就会自动执行,去MQ里面找对应的消息进行消费)

5、消费类根据对应的主题、标签tag、topic找到MQ里面对应的消息,在onMessage方法里面把数据拿出来,然后去调用doSeckill秒杀方法,执行秒杀操作。

6、执行秒杀操作后下一行代码,再向MQ发送一条秒杀结果的消息

7、创建一个websocket-server服务,配置到websocket需要的配置类和server类,然后写一个消费MQ消息的消费类。去消费第6点说的秒杀结果的消息。

8、获取到秒杀结果的消息后,再通过传来的消息里面的uuid,通过websocket的方法获取到对应的客户端,然后把秒杀结果发送过去,发给客户端。

以后看可能不会很清晰,需要结合上面的笔记。

一个消息G放在MQ中,这时候有多个消费者(A消费者和B消费者),属于不同的消费组,只要这些消费者(A、B)的主题topic、标签tag和消息G的主题topic、标签tag对应上,都可以消费这个消息G。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_L_J_H_

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值