Reactor Eventbus示例,它返回响应或错误

时间:2016-10-17 14:46:55

标签: java asynchronous project-reactor

首先,我是异步处理领域的新手。在我目前的项目中,我们使用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的内容,但找不到与我的案例相似的例子。

1 个答案:

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

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