Rabbitmq实际项目应用之同步上万家店铺订单信息(1)

所有你说知道的工具相当于手里的卡牌,在写项目的时候你了解更多的卡牌就能更快的解决项目中遇到的问题。

实际项目需求:同步更新多家亚马逊店铺的订单信息。保证1分钟更新一次。

解决方案这里我分版本介绍.
解决方案 v1.0

店铺少的时候 便于项目快速上线 .采用了直接liunx 定时 执行PHP脚本. 每一分钟轮训所有店铺信息去查询。

优点:速度快,直接调用数据库轮询店铺信息即可完成订单同步
缺点:如果一个店铺调用失败,后续任务终止,导致后面剩余更新的店铺订单信息始终无法同步

解决方案 v2.0

使用PHP多进程方案解决。例如10个店铺,查询出来。创建10个不同进程分别更新店铺订单信息。完美解决因为单个店铺失败导致的程序终止。

优点:速度快,可同时处理多个店铺。保证数据同步。
缺点:店铺数量不多的时候,能够正常执行。如果有成千上万个店铺。那将会产生成千上万个进程。会导致系统崩溃。

解决方案 v3.0
使用rabbitmq消息中间件。 每一分钟添加需要更新的店铺信息进入队列。调度消费者进行订单同步。

优点:速度快,可同时处理多个店铺。同时保证每个店铺都能更新,保证数据同步。同时前端用户可异步调用。
缺点:如果单个店铺更新出现问题,会导致消费者进程终止。
(解决办法:创建liunx守护进程。这里写了一个shell脚本 每一分钟执行一次,判断当前工作运转的消费者进程数量,如果数量达不到预定的数量,马上开启新进程.)

其实PHP也能写出守护进程的脚本
结合上面实例,我们由PHP来创建进程,并保存pid。然后每隔一段时间来轮训判断这些pid是否还存在,如果异常终止了 我们就重新创建一个新的进程来代替挂掉的进程。

下面贴出守护shell脚本

#!/bin/bash
time=$(date "+%Y-%m-%d %H:%M:%S")
echo -e "${time}\n";
alive=`ps aux|grep 任务名称|grep -v grep|wc -l` #判断当前任务的进程数量
if [ $alive -le 1 ] #当消费者数量小于1时
then
int=1;
while(( $int<=5 ))   #运行5个新消费者
do
    nohup 需要执行的脚本路径
    let "int++"
done
fi
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员若风+

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值