Я новичок в Spring-Webflux.
Я запускаю приведенный ниже пример проекта на 2-ядерном процессоре.Мой API RESTful будет вызывать внешний API, и ответ внешнего API будет менее 500 мс.
Когда я использую jMeter для нагрузочного тестирования, я не могу достичь более 15 TPS.
Am iчто-то упущено или что-то не так с приведенным ниже дизайном?
Насколько эффективно переопределить исполнителя Threadpool по умолчанию в проекте Webflux?
Заранее спасибо.
Controller.java
----------------
LookupController
{
@ Autowired
частный LookupService lookupService;
@PostMapping (value = "/ findOrder")
public Mono> findOrder (@RequestBody InputBean inputBean) {
return lookupService.findOrder (inputBean)
.map (соответственно -> ResponseEntity.ok (респ))
.defaultIfEmpty (ResponseEntity.notFound (). build ());
}
}
Служба
---------
@ Service
открытый класс LookupService
{
private RestWorker restWorker;
public Mono findOrder (InputBean inputBean)
{
..// Базовая проверка
ApiBean apiBean = restWorker.buildApiBean (inputBean);
Mono responseStr = restWorker.callApi (apiBean);
возвращать responseStr.flatMap (-> {
// Business Logic
// Обработка ответа API и создание соответствующего ответа контроллера
return Mono.just (controllerResponse);
});
}
}
Помощник
---------
@ Component
public RestWorker {
private Webclient webClient = null;
@ PostConstruct
private void initWorker () {
webClient = WebClient.builder ()
.baseUrl (httpUrl)
.defaultHeader(HttpHeaders.CONTENT_TYPE, "application / json")
.defaultHeader (HttpHeaders.ACCEPT, "application / json")
.defaultHeader (HttpHeaders.ACCEPT_CHARSET, "UTF-8")
bu (10) *.;
}
public ApiBean buildApiBean (InputBean inputBean) {
// Создать ApiBean на основе входного bean + config values
....
return apiBean;
}
public Mono callApi (ApiBean apiBean) {
Mono responseMonoStr = null;
try {
responseMonoStr = webClient.post ()
.uri (url_tibco)
.body (BodyInserters.fromObject (reqDoc))
.exchange ()
.timeout(Duration.ofMillis (socketReadTimeout))
.flatMap (clientResponse -> {
System.out.println (Thread.currentThread (). GetName () + "Код состояния:" + clientResponse.statusCode ());
return clientResponse.bodyToMono (String.class);
});
} catch (исключение исключения) {
return Mono.just ("");
}
}
}