假如有一个文章审核,通过后加积分的需求,审核是这个方法的主体,而加积分并不需要实时同步,这时,我们就可以将加积分的功能变为异步执行。
Spring实现异步的方法
1.AsyncRestTemplate
https://blog.csdn.net/jiangchao858/article/details/86709750
2.@Async注解
https://spring.io/guides/gs/async-method/
3.WebClient(Spring 5.0引入)
https://docs.spring.io/spring/docs/5.1.8.RELEASE/spring-framework-reference/web-reactive.html#webflux-client
4.MQ
引入MQ后,生产者生产消息,然后将消息发送给MQ,消费者监听这个消息所属的topic,一旦接收到消息,就进行相关的处理。
MQ的适用场景
1.异步处理:不解释
2.流量削峰填谷:例如秒杀活动,可以用MQ控制参加人数,人数一旦达到阈值,就丢弃请求或跳转到错误页。防止应用被流量洪峰打死。
3.解耦微服务:假如A调用B,B挂了,虽然有sentinel可以保护A不被B拖死,但是依然无法正常返回,用MQ以后,A把消息发给MQ,就算B挂了也没事,后面B恢复正常会从MQ中拿消息处理,AB也解耦了。
RocketMQ
https://git.imooc.com/coding-358/rocketmq-dev-guide
搭建RocketMQ
1.http://rocketmq.apache.org/release_notes/release-notes-4.5.1/下载Binary并解压
2.配置环境变量:变量名:ROCKETMQ_HOME, 变量值:MQ解压路径\MQ文件夹名
3.启动NAMESERVER:cmd到bin目录下,执行start mqnamesrv.cmd
4.启动BROKER:cmd到bin目录下,执行start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true
tips:假如弹出提示框提示‘错误: 找不到或无法加载主类 xxxxxx’。打开runbroker.cmd,然后将‘%CLASSPATH%’加上英文双引号。保存并重新执行start语句。
RocketMQ插件部署
1.下载https://github.com/apache/rocketmq-externals.git
2.配置:进入rocketmq-console\src\main\resources文件夹,打开application.properties进行配置。