gpt4 book ai didi

stomp - Spring STOMP 订阅的最佳实践 - 订阅消息确认

转载 作者:行者123 更新时间:2023-12-01 09:36:26 26 4
gpt4 key购买 nike

我正在开发一个利用 websockets 工具的 Spring 应用程序。为了使其更健壮,我使用了 STOMP/SimpleBrokerMessageHandler,如文档中所述。一切顺利,我已经能够非常快速地连接到 javasctipt 客户端,所以我切换到使用“androidasync”库在 Android 客户端上工作。

我发现的事实是,在服务器处理订阅请求后,Android 客户端(我想任何其他客户端也是如此)没有得到任何反馈。阅读 SimpleBrokerMessageHandler 的来源确认:

    if (SimpMessageType.SUBSCRIBE.equals(messageType)) {
this.subscriptionRegistry.registerSubscription(message);
}
else if (SimpMessageType.UNSUBSCRIBE.equals(messageType)) {
this.subscriptionRegistry.unregisterSubscription(message);
}
else if (SimpMessageType.MESSAGE.equals(messageType)) {
sendMessageToSubscribers(headers.getDestination(), message);
}
else if (SimpMessageType.DISCONNECT.equals(messageType)) {
String sessionId = headers.getSessionId();
this.subscriptionRegistry.unregisterAllSubscriptions(sessionId);
}
else if (SimpMessageType.CONNECT.equals(messageType)) {
SimpMessageHeaderAccessor replyHeaders = SimpMessageHeaderAccessor.create(SimpMessageType.CONNECT_ACK);
replyHeaders.setSessionId(headers.getSessionId());
replyHeaders.setHeader(SimpMessageHeaderAccessor.CONNECT_MESSAGE_HEADER, message);

Message<byte[]> connectAck = MessageBuilder.withPayload(EMPTY_PAYLOAD).setHeaders(replyHeaders).build();
this.clientOutboundChannel.send(connectAck);
}

它清楚地表明它不会返回任何预期的 CONNECT 情况......

我似乎绝对需要有一种方法来确保客户的订阅请求已得到妥善处理或被拒绝,或者在中间某处抛出异常或类似的事情。我如何验证它已被处理?在这种情况下推荐的方法是什么?

我不能只向 channel 发布假消息并检查它是否通过订阅路由回客户端,因为其他客户端可能订阅了它,因此也会收到这条假消息。这确实不是一个好的选择。

最佳答案

所以我在阅读 STOMP Documentation 时看到了这个信息

Header receipt

Any client frame other than CONNECT MAY specify a receipt header with an arbitrary value. This will cause the server to acknowledge the processing of the client frame with a RECEIPT frame (see the RECEIPT frame for more details).

看起来像你想要的,虽然我还没有确认 spring 实现是否真的这样做了。

关于stomp - Spring STOMP 订阅的最佳实践 - 订阅消息确认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26473922/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com