簡體   English   中英

vert.x等待多條消息的回復

[英]vert.x Wait for reply on multiple messages

在vert.x中,我可以向另一個Verticle發送消息並“異步等待”以進行回復。

問題是:我想向多個Verticle發送消息,並在所有Verticle回復時調用異步處理程序。

這是可能的還是有更好的設計來實現這個功能?

編輯:

我有一個垂直A,它發送消息到Verticle B,C和D.每個Verticle(B,C,D)對消息做一些事情並返回一些數據。 然后,垂直A接收來自B,C,D的響應,並對所有數據執行某些操作。 問題是我為每個發送的消息都有一個處理程序(一個用於A,一個用於B,一個用於C),我希望在所有回復到達時調用一個處理程序。

從Vert.x 3.2開始,該文檔解釋了如何使用FutureCompositeFuture 異步協調

因此,假設您希望通過事件總線進行兩次send調用,並在兩者都成功時執行某些操作:

Future<Message> f1 = Future.future();
eventBus.send("first.address", "first message", f1.completer());

Future<Message> f2 = Future.future();
eventBus.send("second.address", "second message", f2.completer());

CompositeFuture.all(f1, f2).setHandler(result -> {
  // business as usual
});

最多可以將6個期貨作為參數傳遞,或者它們可以作為列表傳遞。

最好的方法是使用由Netflix的Rx.Java實現並由RxVertx模塊提供的Reactive Extensions。

各種各樣的運算符允許您執行諸如將幾個異步調用的結果“壓縮”為新結果並使用它執行任何操作。

在GitHub上有一個簡單的演示 ,其中包含:

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

這個片段顯示了來自兩個事件總線異步交互的兩個observable如何被“壓縮”(即合並)成一個最終的HTTP響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM