特別なファイル名を検出している2つの頂点があるとします(たとえば、何でも構いません)。イベントバスに公開してください。 1は、ファイルシステムからREST APIと別の名前を読んで:イベントバスの終了と結果の取得
ScanRestVerticle.java
/**
* Reads file names through an REST API
*/
public class ScanRestVerticle extends AbstractVerticle {
@Override
public void start() throws Exception {
HttpClientRequest req = vertx.createHttpClient().request(HttpMethod.GET, "BASE_URL", "URL");
req.toObservable()
.flatMap(HttpClientResponse::toObservable)
.lift(unmarshaller(Model.class))
.subscribe(c -> vertx.eventBus().publish("address", c.specialName()));
req.exceptionHandler(Throwable::printStackTrace);
req.end();
}
}
ScanFsVerticle.java
/**
* Reads file names from a file
*/
public class ScanFsVerticle.java extends AbstractVerticle {
@Override
public void start() throws Exception {
StringObservable.byLine(vertx.fileSystem()
.rxReadFile("myFileNames.txt")
.map(Buffer::toString)
.toObservable())
.subscribe(c -> vertx.eventBus().publish("address", c), e -> System.err.println(e.getMessage()));
}
}
すべてが今、ここで素晴らしい作品が、私はイベントバスからこれらの名前を組み合わせてSTDに出力するverticleを持っています.OUT:
PrintVerticle.java
public class PrintVerticle extends AbstractVerticle {
@Override
public void start() throws Exception {
vertx.eventBus()
.<JsonObject>consumer("address")
.bodyStream()
.toObservable()
.reduce(new JsonArray(), JsonArray::add)
.subscribe(j -> System.out.println(j.toString()));
}
問題は、私が考えるように、イベントバスは無限のストリームをしているのでが、実際に完了されることはありませんここでを減らすことです。
実際にこの操作を完了し、両方の頂点によって発行された名前を印刷するにはどうすればよいですか?
注:私はvert.xとRXで本当に新たなんだと私はいくつかの作品を見つからないか、間違った何かを得るかもしれないので、裁判官:)事前に
おかげで」いけないしてください。
EDIT:中間結果を得るにはreduce()
の代わりにscan()
に電話することができますが、どうすればscan().last()
を得ることができますか?
完成の定義は何ですか? 2つの情報源によって公開された2つの名前をすべて収集したい場合は、2つのイベントを区別する必要があります – yosriz
質問ありがとう!例で分かるように、私は両方の "スキャン"頂点からすべての名前を集め、それらを "印刷"の頂点に結合したいと思います...もちろんこれは単純化された例です。 –