最近公司的一个项目,本人并没有参与,但是也了解一点,在其中学习了一些解决问题的思路.
这个 项目就是metLife,项目背景是:一个保险公司需要给他们的客户整一个体检的服务,我们公司是专业搞体检的,想要在微信的小程序中实现用户登录,并且选择项目的体检,挂号,问诊等服务.
1.项目的需求是200的并发,最大峰值是300并发.
对于并发量我们的解决方案是使用MQ限流,在asyc模块接收请求,吧所有的请求都压入RabbitMQ中,角色是生产者.然后在tailor模块使用消费者接收请求.
2.推送消息给保险公司,需要重试机制
在业务层把需要推送给保险公司的数据添加到RabbitMQ中,然后消费者通过httpClient发送数据,根据返回结果判断是否发送成功,对发送失败的数据添加Redis中,这里使用redis的lpush命令,把数据压入到redis的list数据模型中,然后在定时任务中从redis中取数据,使用rpop命令取出数据,并使用线程池每次启用一个线程重发,在这里发送的失败要计数;
补充:redis的list数据模型是一个双向链表结构,可以使用lpush和rpush(左插入和右插入),取的话就是rpop和lpop
总结:
RabbitMQ可以抵抗一定的并发量,还可以将业务之间解耦,更易于扩展