Как работают операции блокировки в Spring MVC с помощью WebClient?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как работают операции блокировки в Spring MVC с помощью WebClient?

Сообщение Anonymous »

У меня возникла проблема с пониманием следующего сценария, поэтому мне нужны разъяснения.
У меня есть приложение SpringBoot, использующее Web MVC.
Зависимости возникают следующим образом:

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

org.springframework.boot
spring-boot-starter-webflux


org.springframework.boot
spring-boot-starter-web

Я знаю, что добавление модулей Spring-boot-starter-web и Spring-boot-starter-webflux в автоматическую настройку Spring MVC поверх Spring WebFlux описано здесь.
Приложение предоставляет Rest-Controller, например:

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

@RestController
public class EmployeeRestController {

@Autowired
private EmployeeService service;

@GetMapping("/api/employee/get/{id}")
public Employee getEmployee(@PathVariable("id") int id) {
return service.fetchEmployeeData(id);
}
}
Метод getEmployee использует Службу Работника, которая затем должна взаимодействовать со сторонним API через Spring Reactive WebClient (поскольку RestTemplate не рекомендуется). Сервис выглядит следующим образом:

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

@Service
public class EmployeeService {

private final WebClient webClient;

public EmployeeService(WebClient.Builder webClientBuilder) {
this.webClient = webClientBuilder.baseUrl("http://mydatasource.com/employees").build();
}

public Employee fetchEmployeeData(int id) {
Employee result = this.webClient
.get()
.url(id)
.retrieve()
.bodyToMono(Employee.class)
.block();

// do other service-related stuff here

return result;
}
}
Возможно, вы уже заметили блокировку-операции, которую обычно не следует использовать в реактивном программировании, чтобы не блокировать потоки/приложения.
Я пришел к выводу, что использование неблокирующих механизмов не имеет значения, поскольку Spring Web MVC работает в блокирующем стеке, следуя шаблону «один поток на запрос». Из-за этого операция блокировки будет блокировать только назначенный поток текущего запроса - верно? (Это подкреплено великолепной визуализацией в разделе 1 этого блога.)
Поэтому мой вопрос: правильно ли мое понимание/предположение? Если да, то как мне легко это доказать?

Подробнее здесь: https://stackoverflow.com/questions/788 ... lient-work
Ответить

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

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

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

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

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