【发布时间】:2020-09-30 14:50:00
【问题描述】:
我正在回答我自己的问题,但我想我会写这篇文章,因为我在这个问题上遇到了很多困难,而且我也有兴趣听到其他答案。
环境
我们正在使用 Stripe 服务器端进行支付(一次性和订阅),并且我们正在使用 Stripe webhook 在我们的数据库中记录支付和事件。我们在负载均衡器后面有多个服务器,并且我们使用金丝雀/滚动部署,因此在部署期间并非所有服务器都运行相同的代码版本。
问题
当您想要升级 Stripe API 版本时,经常会发生需要更改代码的重大模型更改(例如新的或重命名的字段)。如果您不经常升级,可能会有很多变化! 咳嗽 咳嗽 ????
在滚动部署期间有一个 catch-22:
- 如果您等到所有服务器都部署了新代码/库来更新 Stripe 仪表板中的 Stripe 版本,“新”服务器可能会在部署期间抛出错误,因为它们正在接收旧 JSON 格式的 webhook。
- 如果您在部署所有服务器之前更新 Stripe 版本,那么“旧”服务器可能会抛出错误,因为它们与新的 JSON 格式不兼容。
- 如果您在部署时更新 Stripe 版本...您会得到两者的混合。
Stripe 允许您设置多个 webhook URL,每个都有自己的 API 版本。 但所有匹配的事件都会发送到所有 webhook URL(起初我并不清楚)。
在较新的 Stripe Java 库中还有一种机制可以在事件模型不匹配时实现您自己的“异常处理程序”,但它需要编写代码并跟踪自上次升级以来的每个模型更改,在我们的例子中是……太多了:)
同样对于较新的 Stripe 库,您不能覆盖 Stripe 版本:它现在是硬编码的(这很有意义)。
【问题讨论】:
标签: stripe-payments