2016-09-24 7 views
-1

У меня неправильное понимание «реактивного» или что-то не так в моем примере? Я сделал небольшой пример кода в Vertx: в службе REST я читал данные из mongodb и возвращался как JSON.Является ли следующий код с Vert.x действительно реактивным?

........... 
Router router = Router.router(vertx); 

    router.route().handler(BodyHandler.create()); 
    router.get("/gilders").handler(this::listAll); 

    vertx.createHttpServer().requestHandler(router::accept).listen(8080); 
    } 



    private void listAll(RoutingContext routingContext) { 
    mongoClient.find("gliders", new JsonObject(), results -> { 
     List<JsonObject> objects = results.result(); 

     /* is this non blocking?! 
     mongoClient.find return immediately, but the rest client just 
     gets results, after mongo delivered all results 
     */ 

     List<Glider> gilder = objects.stream() 
       .map(res -> { 
       Glider g = new Glider(); 
       g.setName(res.getString("name")); 
       g.setPrice(res.getString("price")); 
       return g; 
       }) 
       .collect(Collectors.toList()); 

     routingContext.response() 
       .putHeader("content-type", "application/json; charset=utf-8") 
       .end(Json.encodePrettily(gilder)); 
    }); 
    } 

ОК, не блокируя, я мог бы вычислить что-то еще, ожидая монго.

Но почему-то я подумал о «реактивном», что клиент REST получит уже первые куски результатов mongo, даже монго все еще не готов найти все к тому времени (HTTP Streaming). Но, как это, обратный вызов только что вызывается, когда mongo нашел все результаты.

ответ

1

Реактивный не то же самое, что и потоковая передача. Reactive - это концепция потоков данных, ваше приложение будет реагировать на события, например: данные, возвращаемые из mongoDB. Теперь вы можете реализовать потоковое вещание поверх него, попросив клиента mongo начать перекачку данных как можно скорее из сети. Однако в блокирующем API вы можете делать потоки, блокируя приложение для данных, а затем передавайте его один за другим потребителю.

+1

ОК, на нижнем уровне я уже заметил, что это был своего рода глупый вопрос. Но я подумал, что лучше задавать глупые вопросы, чем оставаться глупыми – midnight