首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >API网关将同步调用转换为异步调用

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

Stack Overflow用户
提问于 2018-09-27 04:13:14
回答 1查看 1.1K关注 0票数 1

我有两个服务必须集成在一起,并在这两个系统上进行最小的更改:

  1. 首先,系统提供了一种通过使用Azure服务总线队列发送命令的方法。在处理该命令时,它将有关已处理命令的事件(通过Azure Service Bus主题)发送回发送初始命令的系统。
  2. 第二服务(第三方)只能进行同步调用,由于技术上的限制,不能使用消息代理。

有了所有这些,我需要将第二个服务与第一个服务集成起来,并且我看到提供能够将同步调用转换为异步的API网关可能是有意义的。

我们使用:

  • SpringBoot2.0,Spring
  • Java 9
  • Azure
  • Azure服务总线

我没有找到任何可以将同步调用转换为异步调用的库或框架。无论如何,有一种方法可以定制解决方案:

  1. API网关为秒提供REST服务。当第二个服务调用Gateway时,它向Azure服务总线队列发送一个命令
  2. 在网关端要实现某种等待机制,网关必须保持第二业务连接保持打开,直到收到来自第二服务的事件时才进行等待。一旦它选择了事件,它就可以为来自第三方系统的同步调用构建一个响应。
  3. 我非常肯定,当同步调用的超时结束而我们还没有收到来自第一个服务的事件时,我们将面临这样的情况。为了处理这种情况,我们必须回滚由第一服务处理的命令(这是某种补偿)。

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

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

似乎有一个链接显示并命名了从同步到异步https://dzone.com/articles/patterns-for-microservices-sync-vs-async的转换。它被称为同步包装器。

EN

回答 1

Stack Overflow用户

发布于 2018-09-27 06:38:29

我建议的是忘记等待异步任务完成的网关。IMHO,两个可能更好的解决方案是HTTP轮询和WebHooks。

HTTP轮询-客户端不断查询数据的状态。

Web由后台作业触发的事件,并在完成任务后将数据发送到目标HTTP端点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52529347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档