【发布时间】:2025-11-21 12:00:02
【问题描述】:
我有 2 个网络服务 (WSa) 和 (WSb)...
Web 服务 (WSa) 将调用 Web 服务 (WSb) 的方法 (Mx)...
Web 服务 (WSb) 将通知用户 (U1) 回答某个问题 (Q1)...
用户 (U1) 将通过调用另一个方法 (My) 并传递答案来回复 (WSb)...
现在,(WSb) 如何回复 (WSa) 的原始请求?!
换句话说,方法 (Mx) 如何在将回复发送回服务 (WSa) 之前等待用户 (U1) 调用方法 (My)?!
我试图在 (WSb) 中定义一个静态布尔字段 (sem),它可以用作信号量。因此,在通知用户输入后,方法 (Mx) 将循环至 sem = true。当用户 (U1) 调用方法 (My) 并提供他/她的答案时,将 sem 设置回 false,以便方法 (Mx) 可以继续执行并回复服务 (WSa)。但是,应用程序崩溃。我想这不是处理 Web 服务的正确方法。
那么你有什么建议要记住我不能改变服务(WSa)。我只能玩 (WSb) 及其 RESTful 方法?!
【问题讨论】:
-
sequence diagram 确实有助于澄清发生了什么
-
@Devstr 已更新。
-
您是否使用 Java 编写服务?你可以考虑CompletableFuture之类的东西。在 WSb 请求线程中创建一个未来,将其放入某个注册表中,然后加入它。然后在其他线程中,用户将提供答案并完成未来,这将恢复请求线程。稍后我会尝试发布更详细的答案。
-
感谢您的回复。我会检查并回复你。是的,我正在用 JAVA 编写 WSb。
-
我在网上看了一些代码,它似乎不起作用。信号量解决方案看起来不错,但是,我不知道为什么它不起作用?如果在 Mx 中执行 semaphore.acquire(),方法 My 能够释放它,但是,我在 WSa org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException 中收到以下错误:MessageBodyReader not found for media type=text/html ;charset=utf-8, type=class ... 令人惊讶的是,Mx 中的其余线程在释放后并未执行!!!