架构背景:
浏览器/app <-- http -> Web请求处理层 <-- RPC --> Workerman-RPC业务逻辑处理层
业务说明:
数量一定的商品,用户需要对该商品预约下单购买,预约成功后必须在30min内支付购买。用户预约后,商品对外供应数量减少1;当用户在30min时限内没有支付购买,商品对外供应数量恢复1。
实现:
上述业务逻辑在 Workerman-RPC框架的的Order服务实现;当用户预约成功后,是否可以在Order服务内通过Timer::add()添加一个定时器,30min后来处理 “用户在30min时限内没有支付购买,商品对外供应数量恢复1。” 的逻辑。
另外对于Timer阻塞进程有个疑问: Timer本身并不会阻塞进程,只是Timer触发的任务会阻塞进程?
Timer触发的时候会阻塞进程。
没有被触发不会阻塞进程。
感觉crontab更适合你的业务。每分钟运行一次。
使用Workerman-RPC做这个业务有个风险,如果业务代码有致命错误,会导致进程退出,进而导致定时器丢失。
恩,谢谢!这两天调试的时候也发现进程结束会导致进程中所有定时器丢失这个问题。