używam reaktora 2 i sprężyna 4. Oto typowy kod, który mam - Consumer
pracy z repozytoriumObsługa wyjątków przez Reactor Wiosna
@Consumer
public class ApplicationService {
@Selector(value="/applications/id", type = SelectorType.URI)
@ReplyTo
public Application byApplicationId(String id) throws ApplicationNotFoundException {
Application app = appRepo.findOne(id);
if(app == null)
throw new ApplicationNotFoundException("Application `" + id + "` could not be found.");
return app;
}
}
Następnie Mam kontroler, który przekazuje żądanie do eventBus
do którego mijam żądania i zwróci Promise
@RestController
@RequestMapping("/applications")
public class ApplicationsController {
@RequestMapping(value = "/{id}", method = GET, produces = APPLICATION_JSON_VALUE)
public Promise<Event<Application>> byApplicationId(@PathVariable final String id) {
final Promise<Event<Application>> p = Promises.prepare(env);
eventBus.sendAndReceive("/applications/id", Event.wrap(id), p);
return p;
}
}
miejsca pracy, ale w przypadku ApplicationService
rzuca wyjątek Promise
s wartość nie jest ustawiona, ale ja rozumiem idąc w th Konsola e:
16:46:58.003 [main] ERROR reactor.bus.EventBus - null
java.lang.reflect.UndeclaredThrowableException
at org.springframework.util.ReflectionUtils.rethrowRuntimeException(ReflectionUtils.java:302)
...
Caused by: com.metlife.harmony.exceptions.ApplicationNotFoundException: Application `2860c555-0bc4-45e6-95ea-f724ae3f4464` could not be found.
at com.metlife.harmony.services.ApplicationService.byApplicationId(ApplicationService.java:46) ~[classes/:?]
...
Caused by: reactor.core.support.Exceptions$ValueCause: Exception while signaling value: reactor.bus.Event.class : Event{id=null, headers={}, [email protected], key=/applications/id, data=2860c555-0bc4-45e6-95ea-f724ae3f4464}
Pytania są następujące:
używać reaktora i
eventBus
w niewłaściwy sposób? a jeśli tak, to jaki jest właściwy sposóbmoże ta funkcja nie jest realizowana jeszcze
'eventBus.sendAndReceive ("/ Applications/ID", Event.wrap (id), p);' nie cuase odlewania błąd? –
@AnadiMisra w którym momencie? – EvgeniySharapov
Próbowałem twojego kodu z ciekawości i otrzymałem: "Metoda sendAndReceive (Object, Event >, Consumer) w typie EventBus nie ma zastosowania do argumentów (String, Event , Promise >)' w tym linii, mój obiekt Obietnicy 'Promise > response = Promises.prepare (env);' –