Spring Component Singleton Scope с спящими потокамиJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Spring Component Singleton Scope с спящими потоками

Сообщение Anonymous »

У меня есть следующий код, который получает токен сеанса путем HTTP-вызова сторонней службы. Время от времени я получаю 500 или 503, когда сторонний сервис переполнен запросами.
Я здесь реализую сверхпримитивную политику отсрочки. В идеале мне нужен ограничитель скорости, но сейчас я предпочитаю простое и быстрое решение.
Дело в том, что этот класс является компонентом Spring (@Component) и используется в в многопоточной среде несколько потоков будут использовать этот класс SessionHandler.

Код: Выделить всё

    public String obtainSessionToken(String orgId,
String userId) throws UiSessionTokenGenerationException {
String sessionTokenJson;
int retriesRemaining = maxRetries;
while (true) {
try {
sessionTokenJson = browserSessionTokenService.getBrowserSessionToken(
orgId,
userId);
break;
} catch (Exception e) {
--retriesRemaining;
String message = "Error generating UI session token" ;
LOG.warn("{}, retriesRemaining={}", message, retriesRemaining);
if(retriesRemaining == 0)
throw new UiSessionTokenGenerationException(message);
int sleepMultiplier = maxRetries - retriesRemaining;
sleep(sleepMultiplier);
}
}
return extractSessionFromResponse(c2cTenant, recordId, sessionTokenJson);
}

private void sleep(int sleepMultiplier) {
try {
Thread.sleep(minSleepPeriod * sleepMultiplier);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
Интересно, будет ли это узким местом, учитывая, что все объекты в Spring по умолчанию создаются в одноэлементной области видимости. Так не должно быть, верно?
===========UPDATE==========
Позвольте мне уточнить мой вопрос: я предполагаю, что каждый вызывающий поток будет иметь свое собственное выполнение и не будет мешать выполнению другого потока, если только в классе с одиночной областью действия нет какого-либо кода, который используется всеми вызывающими потоками. Поскольку применяются спящие потоки для каждого вызывающего потока общая пропускная способность не пострадает. Верно ли это предположение? И, как таковой, этот класс может оставаться компонентом (одиночным элементом).

Подробнее здесь: https://stackoverflow.com/questions/760 ... ead-sleeps
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»