【发布时间】:2020-07-21 00:16:44
【问题描述】:
我们有一个 ruby rails 前端和分布式后端服务,通过 Redis 运行批处理作业。
前端将获取初始的 Xero oauth2 令牌。
令牌将在 30 分钟后过期,刷新令牌持续 60 天(很棒),但只能使用一次。
当多个后端进程尝试访问 Xero 并且令牌已过期时,只有一个可以成功所有其他进程都会失败,因为刷新令牌是一次性使用的。
数据库事务边界使得通过数据库共享令牌变得不切实际。
我考虑过以下解决方案(我不喜欢其中任何一个):
- 处理所有 xero 交互的单例。
- 在重试过程中包装 xero 并检查 Redis 中可能包含的令牌 已被另一个进程更新。
- 让用户反复通过oauth2登录获取token 每个后端进程。
不幸的是,我对 Ruby 和 Redis 都是新手,所以在这个环境中的实现细节会非常有用。
【问题讨论】:
标签: ruby-on-rails ruby redis oauth-2.0 xero-api