![]() | 1 codespots 2021-01-13 10:44:12 +08:00 支持乙,主要是被调用方不可控,那可控的就只能是调用方了。 |
![]() | 2 Biu0617 2021-01-13 10:55:43 +08:00 主要看业务,通知系统 B 的结果不重要的话就选用 乙方案,通知的结果比较重要就选甲方案并且要增加补推的机制。 |
![]() | 3 Biu0617 2021-01-13 11:01:41 +08:00 ![]() 举例 乙方案:微信支付(即系统 A )回调 /通知到 我们支付中心(系统 B ),微信会回调几次,支付中心无应答后也不会重试了。 甲方案:我们支付中心(此时作为系统 A ) 通知到我们具体的业务系统(系统 B ),要确保支付状态的通知能够通知到位,则会一直请求直到业务系统应答,并且增加监控和异常补推等功能。 |
4 wzzzx 2021-01-13 11:03:03 +08:00 你是说通知,通知的话只需要确保对方知道这个事就可以了 |
5 luckylo OP @Biu0617 http 状态码是 200 了,肯定是通知到位了。B 业务处理失败,返回业务状态码失败,这个不是 A 需要关心的。 因为 B 的这个失败,可能就是 B 无需处理,所以失败。 还有就是,B 接到请求,在处理失败的时候,应该及时落库,如果需要重试处理的,也应该是 B 任务补偿而不是 A 继续通知。因为 A 根本不知道要不要继续通知 |
![]() | 7 qiayue PRO 这个完全看文档如何定的,我们提供接口给平台回调,有些平台要求业务处理成功返回 http 码 200,不成功则返回其他错误码,当非 200 时,平台会重试,同一个数据最多回调 3 次,如果 3 次还不返回 200,由此带来的业务损失,由我们自己负责。 另一个平台则要求我们业务处理成功时返回 {"code":0},处理失败是返回 {"code":xxx} ,当返回 code 非 0 时,平台也会重试,也是最多回调 3 次。 你说这两个平台的处理方式有问题吗? 都没问题,都能解决业务需求。 |
![]() | 8 eason1874 2021-01-13 11:23:11 +08:00 ![]() 直接学支付宝、微信那些大平台的做法,那些是经过检验的。 要求系统 B 返回 success 表示通知到位,同步通知一次,没收到 success 就连续异步通知几次,间隔 4m 、10m 、10m 、1h 、2h 、6h 、15h 等等。 我不太相信状态码,会担心哪天业务逻辑错误,请求没进到实际模块直接返回了 200 状态。 |
9 yeqizhang 2021-01-13 11:41:17 +08:00 两个不能都做吗 |
![]() | 10 zzh7982 2021-01-13 14:40:59 +08:00 直接发给消息队列不就完了么 |
![]() | 11 haosamax 2021-01-13 15:18:28 +08:00 一般支付平台的回调都是甲这种方案 |
![]() | 12 byzf 2021-01-14 02:58:12 +08:00 实际情况里要反馈一下失败的,不反馈失败让用户自己猜失败原因吗。。。那你要反馈一个失败必然不能只靠 200 。 |
14 |