0

首先,我对异步处理领域很陌生。在我当前的项目中,我们使用 spring boot 和项目反应器,特别是 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 返回类型的接受方法来说还不错。但是,现在我有一个场景,我想从处理器方法返回响应,或者如果在处理时发生错误需要抛出适当的异常,并且在任何一种情况下,都需要将响应/异常返回到调用。

这可以使用反应器完成吗?如果是,请为此提供一个简单的示例。我已阅读有关 Promise 的信息,但找不到与我的案例类似的示例。

4

1 回答 1

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())
); 

您可以轻松地在服务响应时通知的调用方注册另一个消费者。

于 2016-10-18T12:19:08.130 回答