Java vert.x在多条消息上等待答复

Java vert.x在多条消息上等待答复,java,vert.x,event-based-programming,Java,Vert.x,Event Based Programming,在vert.x中,我可以向另一个verticle发送消息并“异步等待”回复 问题是:我想将消息发送到多个Verticle,并在所有Verticle回复时调用异步处理程序 这是可能的还是有更好的设计来实现这一功能 编辑: 假设我有一个垂直体a,它向垂直体B、C和D发送消息。每个垂直体(B、C、D)对消息进行处理并返回一些数据。然后垂直体A接收来自B、C、D的响应,并对所有数据进行处理。问题是我发送的每封邮件都有一个处理程序(一个用于a,一个用于B,一个用于C),我希望在收到所有回复时调用一个处理程

在vert.x中,我可以向另一个verticle发送消息并“异步等待”回复

问题是:我想将消息发送到多个Verticle,并在所有Verticle回复时调用异步处理程序

这是可能的还是有更好的设计来实现这一功能

编辑:


假设我有一个垂直体a,它向垂直体B、C和D发送消息。每个垂直体(B、C、D)对消息进行处理并返回一些数据。然后垂直体A接收来自B、C、D的响应,并对所有数据进行处理。问题是我发送的每封邮件都有一个处理程序(一个用于a,一个用于B,一个用于C),我希望在收到所有回复时调用一个处理程序。

最好的方法是使用响应式扩展,由实现和提供

允许您将几个异步调用的结果“压缩”为新结果,并对其执行任何操作

我有一份报告,其中包括:

final Observable<JsonObject> meters = observeMetricsSource(metricsAddress, METERS_BUS_REQUEST, "meters", rx);
final Observable<JsonObject> histograms = observeMetricsSource(metricsAddress, HISTOGRAMS_BUS_REQUEST, "histograms", rx);
subscribeAndRespondJson(zip(meters, histograms, (jo1, jo2) -> jo1.mergeIn(jo2)), req);
final observeable meters=observeMetricsSource(metricsAddress,meters\u BUS\u请求,“meters”,rx);
最终可观察直方图=observeMetricsSource(metricsAddress,直方图\总线\请求,“直方图”,rx);
subscribeAndRespondJson(zip(米,直方图,(jo1,jo2)->jo1.mergeIn(jo2)),req);

此代码片段显示了来自两个事件总线异步交互的两个观察值如何“压缩”(即合并)到一个最终HTTP响应中。

从Vert.x 3.2开始,文档解释了如何使用
Future
CompositeFuture

因此,假设您希望通过事件总线进行两次
发送
调用,并在两次调用都成功时执行一些操作:

Future f1=Future.Future();
eventBus.send(“first.address”,“first message”,f1.completer());
Future f2=Future.Future();
send(“second.address”,“second message”,f2.completer());
CompositeFuture.all(f1,f2).setHandler(结果->{
//一切照旧
});

最多可以将6个期货作为参数传递,也可以将它们作为列表传递。

您好,如果您想将消息“发送”到多个垂直站点,您应该让他们订阅特定主题,然后将消息发布到所有这些站点(请参阅)。为了处理所有的垂直柱收到它们:你说的所有是什么意思?你知道有多少人吗?如果没有,当然每个垂直链接都可以响应,但只有那些真正存在的垂直链接才能响应,这取决于您启动的数量、是否出现故障等。编辑我的问题以进行澄清。好的,您所说的“每条消息一个处理程序”是什么意思?一节课?一个例子?多个消息类型处理程序?您希望它是一个有状态的处理程序吗?接收数据的处理程序和应通知的处理程序是否应该不同?如果您希望有一个正常的消息流来回传递消息和数据,但所有消息都要报告给一个中央处理程序,那么就这样实现它,或者是静态的,因为您知道您想要它,或者是作为消息的一部分传递它。即使有额外的信息,我也有一些问题要完全理解。对不起的:(就像一个verticle是主线程,它向多个从线程发送命令,并等待每个从线程完成它的工作。我使用Java ExecutorService使用“非vert.x”方法解决了这个问题,但将这个问题留待将来参考。好的,但是如果我们在vert.x线程处理的基础上进行自己的管理,那么您就可以打开一个潜在的问题位置。但是如果它是一个主线程,并且应该等待所有从线程,为什么不让主线程垂直发送并相应地发送它,然后通过状态锁定等待响应呢?