Я работаю над приложением Spring, которое использует возможности веб-сокетов. Чтобы сделать его более надежным, я использовал STOMP/SimpleBrokerMessageHandler, как описано в документации. Все прошло хорошо, я смог очень быстро подключить клиент javasctipt, поэтому я переключился на работу с клиентом Android, используя библиотеку «androidasync».
Что я обнаружил, так это тот факт, что клиент Android (я полагаю, и любые другие клиенты) не получает никакой обратной связи после того, как запрос SUBSCRIBE был обработан сервером. Чтение источников 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...
Кажется, мне абсолютно необходим способ убедиться, что клиентский запрос SUBSCRIBE был обработан хорошо или отклонен, или что где-то посередине возникло исключение, или что-то в этом роде. Как я могу убедиться, что он был обработан? Каков рекомендуемый подход в этом случае?
Я не могу просто опубликовать поддельное сообщение на канале и проверить, перенаправляется ли оно обратно клиенту через подписку, потому что другие клиенты могут быть подписаны на него, поэтому они также получат это поддельное сообщение. Это не очень хороший вариант.