小白的web优化之路 三、使用MQ来实现事务异步处理

  在上一篇 小白的web优化之路 二、实战使用redis来缓存列表信息 中,我们讲了使用redis来缓存列表信息,极大的提供了用户访问列表的速度,也减轻了数据库的压力,下面,我们在以一个例子来讲解MQ来实现事务的异步处理。

  在使用了redis解决了列表查询问题之后,小白又遇到了一个问题,刚刚产品经理找他,要他实现一个功能,功能如下:

  当用户完成某一任务时,提高用户的积分,并给此用户的所有朋友发送短信通知,告诉他们此用户完成了某任务,让他们赶紧来玩。

  小白瞬间感觉难住了,提高用户的积分很简单,一个UPDATE就行,但是发送短信通知怎么办呢,假设给一个用户发送短信的时长为50ms,那么串行处理的方式十个用户就是500ms,一百个用户就是5000ms,对于一个接口来说这个时间太长了,是不能接收的,这个问题怎么解决呢?小白陷入了沉思...

 过了一会,小白突然想到,我为什么要马上给用户的好友发送短信呢?就算延迟几秒接收也是可以的啊。我可以在后台创建一个队列,请求来了之后,我先把提高用户的积分,然后把要处理的内容放到队列中,然后直接返回成功就行,后台的处理程序在处理这些队列就可以了。

 小白的想法也就是我们平常常说的MQ,即消息队列。在一些处理时间比较长的任务,我们可以使用MQ进行延时处理,来降低客户的请求等待时间和减轻服务器的压力。

 下面,我们将以activeMQ来解决上述问题。

 首先,先看看没有mq的示例代码:

package com.happyheng;

import com.happyheng.dao.FriendDao;
import com.happyheng.dao.ScoreDao;
import com.happyheng.service.SendMessageService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.anno
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值