Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Muestra de implementaciones personalizadas de suscriptores

Esta guía proporciona información sobre el controlador de Java Reactive Streams y su API asíncrona. La guía también enumera y explica muestras de implementaciones personalizadas de suscriptores.

Nota

Para obtener instrucciones sobre cómo instalar el controlador, consulte la Guía deinicio rápido.

Esta librería es una implementación de la especificación de flujos reactivos. La API de flujo reactivo consta de los siguientes componentes:

  1. Editor(a)

  2. Suscriptor

  3. Suscripción

A Publisher es un proveedor de una cantidad potencialmente ilimitada de elementos secuenciados, publicados según la demanda recibida de su Subscriber o de múltiples instancias de Subscriber.

En respuesta a una llamada a Publisher.subscribe(Subscriber), las posibles secuencias de invocación para métodos en la clase Subscriber se determinan mediante el siguiente protocolo:

onSubscribe onNext* (onError | onComplete)?

Esto significa que onSubscribe siempre es señalizado, seguido de un número posiblemente ilimitado de señales onNext, según lo solicitado por Subscriber. A esto le sigue una señal onError si hay una falla o una señal onComplete cuando no hay más elementos disponibles, siempre que no se haya cancelado el Subscription.

Tip

Para aprender más sobre los flujos reactivos, visita la documentación de Flujos Reactivos.

La API del driver Java de Streams Reactivos refleja la API del driver Java Sync y cualquier método que cause I/O de red para devolver un tipo Publisher<T>, donde T es el tipo de respuesta para la operación.

Nota

Todos los tipos Publisher devueltos por la API son fríos, lo que significa que no ocurre nada hasta que se suscriben. Así que simplemente crear un Publisher no provocará ningún tipo de I/O en la red. No es hasta que se llama al método Publisher.subscribe() cuando el controlador ejecuta la operación.

Los publicadores en esta implementación son unicast. Cada Subscription a un Publisher corresponde a una sola operación de MongoDB, y el Subscriber de la instancia Publisher recibe su propio conjunto específico de resultados.

En la documentación de Java Reactive Streams, hemos implementado diferentes tipos de Subscriber. Aunque este es un escenario artificial para flujos reactivos, bloqueamos los resultados de un ejemplo antes de comenzar el siguiente para garantizar el estado de la base de datos. Para ver el código fuente de todas las implementaciones personalizadas de suscriptores, consulta SubscriberHelpers.java en el código fuente del driver.

  • ObservableSubscriber
    La clase base del suscriptor es el ObservableSubscriber<T>, un Subscriber que almacena los resultados del Publisher<T>. También contiene un método await() para que podamos bloquear los resultados y garantizar el estado de la base de datos antes de pasar al siguiente ejemplo.
  • OperationSubscriber
    Una implementación del ObservableSubscriber que llama inmediatamente a Subscription.request() cuando se suscribe a él.
  • PrintSubscriber
    Una implementación de OperationSubscriber que imprime un mensaje cuando se llama al método Subscriber.onComplete().
  • ConsumerSubscriber
    Una implementación de OperationSubscriber que toma un Consumer y llama a Consumer.accept(result) cuando se llama a Subscriber.onNext(T result).
  • PrintToStringSubscriber
    Una implementación de ConsumerSubscriber que imprime la versión de cadena de result cuando se llama al método Subscriber.onNext().
  • PrintDocumentSubscriber
    Una implementación del ConsumerSubscriber que imprime la versión JSON de un tipo Document cuando se llama al método Subscriber.onNext().

Como nuestros tipos Subscriber contienen un pestillo que solo se libera al llamar al método onComplete() del Subscriber, podemos usar ese pestillo para bloquear acciones posteriores llamando al método await. Los dos ejemplos siguientes usan nuestra solicitud automática PrintDocumentSubscriber.

El primero no es bloqueante y el segundo se bloquea esperando a que Publisher se complete:

// Create a publisher
Publisher<Document> publisher = collection.find();
// Non-blocking
publisher.subscribe(new PrintDocumentSubscriber());
Subscriber<Document> subscriber = new PrintDocumentSubscriber();
publisher.subscribe(subscriber);
subscriber.await(); // Block for the publisher to complete

En general, los tipos Publisher, Subscriber y Subscription comprenden una API de bajo nivel, y se espera que los usuarios y las bibliotecas desarrollen APIs más expresivas sobre ellas en lugar de utilizar únicamente estas interfaces. Como una librería destinada exclusivamente a implementar estas interfaces, los usuarios se beneficiarán de este ecosistema en crecimiento, que es un principio de diseño fundamental en reactive streams.

Volver

Ejemplos CRUD de POJO

En esta página