То, что вы ищете, может быть достигнуто следующим образом
Вы можете использовать результат DeferredResult и сохранять его на карте до тех пор, пока пользователь с таким же sessionId не присоединится.Например,
Map<String, DeferredResult<ResponseEntity<?>>> unconnected = new HashMap<String, DeferredResult<ResponseEntity<?>>>();
Пользователь может вызвать соединение prepareSessionAPI
для получения sessionId
Пользователь затем вызовет API соединения.API-интерфейс connet будет хранить этот запрос / отложенный результат в хэш-карте, пока пользователь 2 не присоединится.Пример
DeferredResult<Task> unconnectedTask = new DeferredResult<Task>();
unconnected.put(sessionId, unconnectedTask);
Теперь запрос пользователя будет храниться в карте памяти до тех пор, пока пользователь два не присоединится
Пользователь один отправит sessionId пользователю два
Пользователь двавызовет connect
API.API подключения будет искать сеанс в HashMap
, и если он существует, он будет выполнять необходимые операции, а затем устанавливать результат отложенного результата.Пример
DeferredResult<Task> unconnectedTask = unconnected.get(sessionId);
if(unconnectedTask != null) {
// Do work
unconnectedTask.setResult(task);
} else {
// This is user one's request
}
Обратите внимание, это псевдокод.