Azure API网关将同步调用转换为异步调用

Azure API网关将同步调用转换为异步调用,azure,asynchronous,microservices,synchronous,gateway,Azure,Asynchronous,Microservices,Synchronous,Gateway,我有两项服务必须在两个系统上进行集成,且变化最小: 第一个系统提供了使用Azure服务总线队列发送命令的方法。处理该命令时,它会将有关已处理命令的事件(通过Azure服务总线主题)发送回发送初始命令的系统 第二服务(第三方)只能进行同步调用,由于某些技术限制,它无法使用消息代理 有了所有这些,我需要将第二个服务与第一个服务集成在一起,我认为提供API网关可能有意义,它可以将同步调用转换为异步调用 我们使用: Spring Boot 2.0,Spring Cloud 爪哇9 蔚蓝 Azure服务

我有两项服务必须在两个系统上进行集成,且变化最小:

  • 第一个系统提供了使用Azure服务总线队列发送命令的方法。处理该命令时,它会将有关已处理命令的事件(通过Azure服务总线主题)发送回发送初始命令的系统
  • 第二服务(第三方)只能进行同步调用,由于某些技术限制,它无法使用消息代理
  • 有了所有这些,我需要将第二个服务与第一个服务集成在一起,我认为提供API网关可能有意义,它可以将同步调用转换为异步调用

    我们使用:

    • Spring Boot 2.0,Spring Cloud
    • 爪哇9
    • 蔚蓝
    • Azure服务总线
    我还没有找到任何可以将同步调用转换为异步调用的库或框架。无论如何,有一种方法可以定制解决方案:

  • API网关为秒服务提供RESTAPI。当第二个服务调用网关时,它向Azure服务总线队列发送一个命令
  • 在网关端应该实现某种等待机制,网关必须保持第二个服务连接打开,并保持它等待,直到接收到来自第二个服务的事件。一旦拾取事件,它就可以为来自第三方系统的同步调用构建响应
  • 我敢肯定,当同步调用超时结束,并且我们还没有收到来自第一个服务的事件时,我们将面临这样的情况。为了处理这种情况,我们必须回滚first services处理的命令(这是某种补偿)
  • [![显示概念的图表][1][1]

    对于一些知名的库或模式,您有什么建议可以帮助实现满足我们需求的解决方案吗

    我还想说,我理解同步转换异步是不自然的,还有其他一些方法,比如在处理命令时使用web挂钩或回调URL将响应发送回调用方。 不幸的是,第三方服务无法为此提供此类API

    似乎有一个链接显示并命名了从同步到异步的转换。
    它被称为Sync Wrapper,我建议您忘记等待异步任务完成的网关。依我看,有两个可能更好的解决方案是HTTP轮询和Webhook

    HTTP轮询-客户端持续查询数据状态。

    Web钩子—由后台作业触发的事件,在其作业完成后将数据发送到目标HTTP端点。

    实际上,我完全同意这一点。Web钩子和轮询是我们的最佳选择。但我不确定我们能否强迫其他系统使用它们。无论如何,当我们将同步调用转换为异步调用时,我更新了我的帖子,并添加了一个指向模式名称的链接。我遇到了类似的情况。你能解决它吗?