Api 如何在同步端点中等待异步回调?

Api 如何在同步端点中等待异步回调?,api,asynchronous,redis,publish-subscribe,synchronous,Api,Asynchronous,Redis,Publish Subscribe,Synchronous,简而言之,以下是场景: 用户点击了一个同步端点,该端点要求我的应用程序提供信息。我的应用程序向另一个只注册订单的服务请求该信息,并给我一个引用即将到来的信息的密钥。为了有效地获取这些信息,我需要侦听一个队列,该队列最终将异步地提供这些信息 我需要向我的用户“假装”整个过程是同步的,以便他们请求我的端点并在响应中立即获得信息 异步回调不会花费更长的时间,我们有一个超时策略,所以它可以按预期工作。不幸的是,我们无法更改外部服务流(可以是同步的,但不是) 我们脑海中闪过的几个想法: 轮询方法:在队列

简而言之,以下是场景:

用户点击了一个同步端点,该端点要求我的应用程序提供信息。我的应用程序向另一个只注册订单的服务请求该信息,并给我一个引用即将到来的信息的密钥。为了有效地获取这些信息,我需要侦听一个队列,该队列最终将异步地提供这些信息

我需要向我的用户“假装”整个过程是同步的,以便他们请求我的端点并在响应中立即获得信息

异步回调不会花费更长的时间,我们有一个超时策略,所以它可以按预期工作。不幸的是,我们无法更改外部服务流(可以是同步的,但不是)

我们脑海中闪过的几个想法:

  • 轮询方法:在队列侦听器的上下文中,我们在信息到达存储引擎(redis)后立即将其持久化。与此同时,我们的请求是请求存储中的信息(添加一个sleep命令以在每次尝试之间执行延迟)。如果找到了,我们就返回它,如果时间超过,就会引发异常
  • 发布/订阅方法:我们在用户请求上下文(在api请求中)订阅该存储(redis),迫使其等待密钥到达。在我们持久化键/值对之后(使用前面描述的相同机制,使用队列侦听器),我的redis订户将收到通知,请求将被释放并发送响应
你们对我们如何更好地解决这个问题还有什么想法吗

对不起,如果我没有让别人明白我的意思。如果需要的话,我可以再深入一点

提前谢谢