0
C'est la meilleure idée que je pourrais élaborer pour obtenir Asynchronicity avec Reactor dans un appel REST, pour la facilité d'utilisation: je ne suis pas satisfaite .. aucune idée sur la façon de le faire mieux?Spring REST asynchrone avec DeferredResult et Reactor
(complete code here for reference)
Interface REST:
@RestController
public class REST_Interface {
@Autowired
public EventBus eventBus;
@RequestMapping("/getGreeting/{name}")
public DeferredResult<String> getGreeting(@PathVariable String name) {
DeferredResult<String> result = new DeferredResult<>();
EventWrapper<String> wrapper = new EventWrapper<>(result, name);
eventBus.notify("greeting.topic", Event.wrap(wrapper));
return result;
}
}
EventWrapper:
public class EventWrapper<T> {
private DeferredResult<T> deferredResult;
private T payload;
public EventWrapper(DeferredResult<T> deferredResult, T payload) {
this.deferredResult = deferredResult;
this.payload = payload;
}
// Getters & Setters
}
consommateurs de l'événement:
@Consumer
public class EventConsumer {
@Autowired
public EventBus eventBus;
@Selector("greeting.topic")
public void onTestTopic(Object o) {
System.out.println("Event receved for Logging " + o.toString());
}
@Selector("greeting.topic")
public void wrappedGreeter(EventWrapper<String> ew) {
ew.getDeferredResult().setResult("Ciao " + ow.getPayload().toUpperCase());
}
}
En Java, cela ne semble pas si agréable. : D Quoi qu'il en soit, cette façon de forcer à utiliser la même méthode tout au long de la chaîne d'événements, ne sera plus un paradigme axé sur les événements, mais seulement une série d'appels asynchrones. –