mysql异步消息队列_消息队列mq的3个使用场景

一、抵御流量洪峰,

整体架构设计如下:

1、nginx+tomcat

2、tomcat controller取到请求后向rocketmq 发送一个msg,将msg id返回给app,同时在redis里缓存msg状态为init(设置定时时间,时间到后清除)

3、client(app/h5/小程序) 通过msg id,定时向server获取msg处理状态

(init时 画圈,没有时返回繁忙,fail时返回处理失败)

4、server向redis查询处理的结果,返回 init/null/fail等状态

------ 后台服务层

1、原来controller里面的逻辑,改为使用rocketmq的消息来驱动

2、processor(原来的controller里面的逻辑) 取出消息,rpc调用后台的服务,将结果设置到redis

区别:1、原来是流量直接打到tomcat,瞬间请求包太多时,会导致tomcat拒绝服务(外部看起来像是down了)

2、现在用rocketmq先缓存消息(至少百万级别,不放心可以使用集群),对于真正的服务处理而言是异步的。

processor可以自己控制消息消费的速度(并发程度),避免整个后台被撑爆

二、实现跨进程、跨数据库的一致性事物

0、msg中带有一个业务的msgId

1、本serv处理完后,保证消息发到rocketmq

2、每个serv进程(分布式)监听自己关心的消息,并消费消息(根据msgid 保证幂等性)

3、serv本地除了业务数据,也要记录消息的处理状态

4、这样正常情况下会执行到最后,出现异常时根据各个serv本地的状态人工补单

三、服务间异步调用

适用情况(10年前,mmo server就已经用这种方式保证扩展性和灵活性):

1、内部的服务非常多(拆的很细)

2、一个serv处理完后有很多的后续serv(甚至不知道有多少个)

实现方式:

1、定义全局消息,比如开始处理、检查完账户有效性、检查完资金、检查完基金状态、支付完成、发起退款、退款完成……

2、每个serv自己做完了,就发出对应的消息

3、后续的serv监听自己关心的消息

整个系统基于宏观的消息来异步组织

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值