2016-03-28 11 views
2

İleti alıp kaydettiğimde, başarıya ulaştığımda veya başarısız olduğunuz bir kullanım durumum var. Mongo eklentisi Gözlemlenebilir bir şekilde döner, böylece flatmap kullanarak zincirleme yapabilirim. Sorun, gözlemlenebilir eklenti insertin sonucunu ortaya çıkarır, fakat cevap vermesi gereken ilk gözlemlenebilir mesajın orijinal mesajına ihtiyacım var. Bu nedenle, bu çalışmayı yapmak için, ilk Gözlemlenebilir'in aboneliği içindeki eki çalıştırıyorum ve ikinci abonenin içinde cevap veriyorum.Zincirleme Gözlemlenebilir ve Gönderme/Gönderme Orijinal Emit'i Abone Olmak İçin Çağırmak İçin Çağrı

Bunu, düzlem gibi bir operatör ile daha reaktif bir şekilde gerçekleştirmeyi umuyordum. Operatörlerin listesini aradım ve aradığım şeyle ilgili hiçbir şey çıkmıyor.

eb.consumer("persister.save.event").toObservable() 
    .subscribe(msg -> { 
     mongo.insertObservable("event", (JsonObject) msg.body()) 
      .subscribe(
       res -> msg.reply(new JsonObject().put("success", true)), 
       error -> msg.fail(500, "failed to save event")); 
      }); 

Yukarıdaki kod, yapılması gerektiği gibi mi, yoksa daha iyi bir yaklaşım mı var? İki abone doğru hissetmiyor.

cevap

2

İşte iki aboneleri önlemek için yapılabilecek ne:

eb.consumer("persister.save.event").toObservable() 
    .flatMap(msg -> mongo.insertObservable("event", (JsonObject) msg.body()).map(mongoResponse -> msg)) 
    .subscribe(
      res -> msg.reply(new JsonObject().put("success", true)), 
      error -> msg.fail(500, "failed to save event")); 

hüner flatMapmsg istediği için Mongo sonucunu map etmektir.

+1

Ah, mükemmel! Çok teşekkür ederim. – zylum

İlgili konular