最近忙活完一个需求,记录下。需求是我们的项目在App Store中有个会员自动订阅的功能。由于会员系统不是我们这边做的,所以之前所有的流程由会员部门的人跟进。我们只负责将记录发送到对方提供给我的API中。但是对方之前C++出身,所以对IOS的开发特性并不熟悉,所以并未处理会员订阅回调的事情。关于这个可以参考https://help.apple.com/itunes-connect/developer/#/dev0067a330b这个。所以听说他们那边是没过3个小时会去扫描一次队列,查看某个用户该月是否有扣费但是还未进行续期,如果存在则续期。虽然运行起来没什么问题,但是3个小时,用户体验实在太差。我在之前处理数据时,有看到用户反馈的数据。一大票人在吐槽钱扣了,但是会员没加上是什么鬼。
以上为背景,所以领导让我处理下自动订阅的回调。除了实时记录推送过来的数据以外,还应该根据事情类型实时通知到会员那边,让他们立刻处理。需求是很简单的需求,但是要考虑的事情还是有些的,简单说下思路。
1.因为提供的API没有签名机制所以,在拿到数据后应该第一时间去苹果那边校验,只有校验通过的数据才能进行下一步
2.需求随时都有可能发生改变,所以程序也随时都有可能重启,但是这种牵涉到支付的程序还是要谨慎些。所以我建了一张缓存队列表,在数据校验通过后,第一时间插入到缓存表中。然后返回200的状态码。这样一旦程序中断,请求必然超时,苹果明确有说如果返回4XX或者5XX会在一段时间内重试的
3.程序在起来时一定会去缓存表中取出未处理的订单放置到工作队列中去
4.后台有个线程不停的从工作队列中获取订单
5.当然会员的3小时轮询机也必然继续沿用下去,作为辅助。毕竟天有不测风雨,总要有plan B 不是
通过以上我便不用担心程序在重启时丢单的问题了