我想在以下部分实现请求/响应模式:
我想要像http请求这样的行为。
发送请求,获得相应的响应。
我尝试用临时频道来做这件事 我发送3条消息
步骤如下:
订阅临时频道
SUBSCRIBE
id:mysub
destination:/temp-queue/example
发送请求并在步骤1
的订阅频道中添加回复标头destination:/queue/PO.REQUEST
reply-to:/temp-queue/example
从服务器获取响应消息
MESSAGE
subscription:foo
reply-to:/queue/temp.default.23.example
destination:/queue/PO.REQUEST
reply-to:/temp-queue/example
但是现在(因为客户端发送消息异步)我不确定服务器上的步骤1是否已完成,因此服务器准备好在步骤2的请求到达服务器时将响应发送到队列。
服务器是否有可能在完成步骤1之前完成步骤2,因此将响应发送到哪里?或者ActiveMQ是否确保以正确的顺序处理和完成从客户端收到的消息1和2?
消息1和2之间的任何竞争条件都可以发生吗?
非常感谢!
答案 0 :(得分:0)
您的客户端发送的任何STOMP帧都可以与收据请求一起发送,该请求使该帧的处理同步。因此,如果您想在发送之前确保订阅已完成,请在订阅框架上附加receipt-id并等待spec mandated RECEIPT框架,然后再继续执行发送,这可确保您的订阅是在任何其他处理之前设置的。