是否保证在基于临时主题的请求/响应方案中处理请求之前建立响应订阅?

问题描述 投票:1回答:1

我想在以下部分中实现请求/响应模式:

  • 服务器:使用ActiveMQ进行Spring Boot
  • 客户端:在websocket上使用stompjs的JavaScript

我想要像http请求这样的行为。

发送请求,获得相应的响应。

我尝试使用临时通道执行此操作,我发送3条消息

步骤是:

  1. 订阅临时频道 qazxsw poi
  2. 发送请求并在步骤1的订阅频道中包含回复标头 SUBSCRIBE id:mysub destination:/temp-queue/example
  3. 从服务器获取响应消息 destination:/queue/PO.REQUEST reply-to:/temp-queue/example

但是现在(因为客户端发送消息异步)我不确定服务器上的步骤1是否完成,因此当步骤2的请求到达服务器时,服务器已准备好向队列发送响应。

服务器是否有可能在完成步骤1之前完成步骤2,因此将响应发送到哪里?或者ActiveMQ是否确保以正确的顺序处理和完成从客户端收到的消息1和2?

消息1和2之间的任何竞争条件都可以发生吗?

非常感谢你!

spring spring-boot websocket activemq stomp
1个回答
0
投票

您的客户端发送的任何STOMP帧都可以与收据请求一起发送,该请求使该帧的处理同步。因此,如果您想在发送之前确保订阅已完成,请将MESSAGE subscription:foo reply-to:/queue/temp.default.23.example destination:/queue/PO.REQUEST reply-to:/temp-queue/example 附加到订阅框架并等待receipt-id框架,然后再继续执行发送,这可确保您的订阅在任何其他处理之前设置。

© www.soinside.com 2019 - 2024. All rights reserved.