首先,我是异步处理领域的新手。在我目前的项目中,我们使用spring boot和project reactor,特别是Eventbus来进行一些异步处理。事实上,使用eventbus也会使我们的系统更具可扩展性。
到目前为止,EventBus的使用非常有限,我们在EventBus消费者中进行一些处理,但不会返回任何内容。配置和示例处理器如下:
//配置文件
@SpringBootApplication
public class Application implements CommandLineRunner {
@Autowired
private EventBus eventBus;
@Autowired
private BatchProcessor batchProcessor;
@Override
public void run(String... arg0) throws Exception {
eventBus.on("batchProcessor", batchProcessor);
}
}
//消费
@Service
public class BatchProcesspr implements Consumer<Event<Request>> {
@Override
public void accept(Event<Request> event) {
// processing goes here
}
直到现在,使用void返回类型的accept方法很好。但是,现在我有一个场景,我想从处理器方法返回响应,或者如果在处理需要抛出适当的异常时发生错误,在任何一种情况下,响应/异常都需要返回到调用。
这可以用反应堆来完成吗?如果是,请提供一个简单的例子。我读过有关Promise的内容,但找不到与我的案例相似的例子。
答案 0 :(得分:0)
您尝试过sendAndReceive吗? http://projectreactor.io/ext/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())
);
您可以轻松地在呼叫方注册另一个在服务响应时收到通知的消费者。