![](/img/trans.png)
[英]Using Semaphore in service inside a DeferredResult REST method in Spring Boot
[英]Spring Asynchronous REST with DeferredResult and Reactor
为了可用性,这是我可以阐述的最好的想法,以便在REST调用中获得与Reactor的异步性:出于对我的理解,关于如何做得更好的任何想法?
( 完整的代码在这里供参考 )
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
}
活动使用者:
@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());
}
}
看一下EventBus.sendAndReceive(),它正是针对这种用例而设计的。 来自http://projectreactor.io/docs/reference/#bus-request-reply的示例:
EventBus bus;
bus.receive($("job.sink"), (Event<String> ev) -> {
return ev.getData().toUpperCase();
});
bus.sendAndReceive(
"job.sink",
Event.wrap("Hello World!"),
s -> System.out.printf("Got %s on thread %s%n", s, Thread.currentThread())
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.