有人能告诉我如何处理下一个案件:
1。客户端的accessToken已过期。
2。客户端对我的api进行两次并发的异步api调用(例如:Thread1、Thread2)。
3.Thread1在Thread2之前收到一个错误:“AccessToken Expired”。
4。通过使用refreshToken,Thread1接收一个新的accessToken=qqqqq。
5。Thread2收到一个错误:“accessToken过期”,然后Thread1用新的accessToken=qqqqq对服务器进行新调用。
6。通过使用refreshToken,Thread2接收一个新的accessToken=wwwww并删除accessToken=qqqqq。
7。这里,Thread1使用accessToken=qqqqq调用不活动的服务器。
8.理论上,通过使两个线程相互无效来循环这两个线程是很有可能的。
我将感谢任何帮助,谢谢。
如果您控制了客户机,那么您可以将一个版本号附加到访问令牌上--如果线程试图使用旧版本号刷新访问令牌,则返回当前(最近刷新的)访问令牌。
public class AccessToken {
private int currentVersion;
private String accessToken;
private static AccessToken currentToken;
public static synchronized AccessToken refresh(AccessToken token) {
if(token.currentVersion == currentToken.currentVersion) {
AccessToken newToken = // refresh token
newToken.currentVersion = currentToken.currentVersion + 1;
currentToken = newToken;
}
return currentToken;
}
}
如果您对客户端没有任何控制权,并且/或者希望在服务器端修复此问题,那么有以下几个选项:
问题内容: 在他对以下问题的回答中:Windows的Golang行为不稳定?建议用户@distributed锁定/同步并发goroutine上对共享变量的访问。 我怎样才能做到这一点? 有关此问题的更多信息: 我获得了同时在多个goroutines 上运行的代码(带有闭包的返回函数): 看起来IO功能很费时间,结果我得到了这种输出: 它可以很好地递增,但是当它被打印时,我可以看到print + i
我正在使用Python(IPython 我有一个3000个唯一ID的数组,可以从API中提取数据,一次只能使用一个ID调用API。 我希望以某种方式同时拨打3组1000个电话,以加快速度。 最好的方法是什么? 提前感谢任何帮助!
有一个列表正在被两个线程同时排序和迭代。不出所料,它导致。不清楚的是错误的时间。 输出:(出现几次) 为什么当第一个线程完成时,另一个线程的迭代失败? 当两个线程分别完成排序并获得迭代器时,底层迭代器将不会改变。为什么在此阶段会导致异常?
(联系人和日历有不同的代币) 同步脚本: $AccesStoken是一个序列化字符串,如下所示: 我做错了什么? 有趣的是,对于联系人来说,同步一直都很好(访问令牌的属性与日历同步中的属性相同)
我需要进行异步调用,并使用其中存在的一些值对同一服务进行多次调用。将这些调用的响应与第一个调用结合起来,然后返回。 例如,当我第一次调用时,我会在JSON下面看到一个ID列表。现在,我必须使用这些ID对一个服务进行多次调用,并列出它们的响应列表,然后通过在同一个JSON中添加它们将其发送到下游。 我试过使用zipWhen和 但是结果列表总是以空或空的形式出现。我们如何才能做到这一点?我是不是漏了什