登录后,实现cookie信息和数据库信息的合并



购物车流程图:
逻辑:当用户登录之后,判断cookie中是否有购物车信息,如果有,和用户数据库中的购物车商品完成合并,如果cookie中没有购物车信息直接完成登录。
登录后,实现cookie信息和数据库信息的合并_第1张图片

用户发起请求登录,前端控制器UserController调用SSO(单点登录)的一个接口,进行登录验证,成功后返回ticket,不成功返回error状态;登录成功还需发一条消息到(RabbitMQ的交换机),拿到这条消息的应用程序(RabbitMQ)绑定了消息队列,监听消息的应用程序得到这个消息后,做自己的业务逻辑,完成redis和数据库中购物车商品的合并。
发送的消息内容应当包含:1.用户——>> userId
2.redis中购物车信息——>> cookie中key——>>TT_CART

登录后,实现cookie信息和数据库信息的合并_第2张图片

要想得到未登录前cookie中的商品信息,需要把用户登录时的cookie信息传递给controller,controller调用service,service,调用SSO登录验证,并把cookie中的key连同userId传递给RabbitMq的消息队列 :this.rabbitTemplate.converAndSend(msg)

更改UserService中的dologin()方法和UserController的dologin()方法,如下
登录后,实现cookie信息和数据库信息的合并_第3张图片

UserController.dologin()接受cookie
登录后,实现cookie信息和数据库信息的合并_第4张图片

这样就把cookie中key传递到了业务逻辑中。

第二步,在SSO中接收params.put("data",cartKey)data参数,并实现发送消息到RabbitMQ的消息交换机

登录后,实现cookie信息和数据库信息的合并_第5张图片

并配置MQ:

登录后,实现cookie信息和数据库信息的合并_第6张图片

这样,消息就发送出来了。

第三步,在taotao-cart中监听队列消息并且完成数据的合并
首先来配置rabbitMQ队列的监听:
监听的类:loginCarHandler
监听的队列:taotao-car-login
登录后,实现cookie信息和数据库信息的合并_第7张图片

处理逻辑:
这里写图片描述
登录后,实现cookie信息和数据库信息的合并_第8张图片
登录后,实现cookie信息和数据库信息的合并_第9张图片

完成队列和交换机的绑定
登录后,实现cookie信息和数据库信息的合并_第10张图片
登录后,实现cookie信息和数据库信息的合并_第11张图片

你可能感兴趣的:(消息队列)