Docs Menu
Docs Home
/ / /
Java Reactive Streams 드라이버

샘플 사용자 지정 구독자 구현

이 페이지의 내용

  • reactive streams
  • 구독자
  • 사용자 지정 구독자 구현
  • 차단 및 비차단 예제
  • 게시자, 구독자 및 구독

이 가이드 에서는 Java Reactive Streams 운전자 와 해당 비동기 API 에 대한 배경 을 제공합니다. 이 가이드 에서는 샘플 사용자 지정 구독자 구현을 나열하고 설명하기도 합니다.

참고

운전자 설치 방법에 대한 지침은 시작하기 가이드 를 참조하세요.

이 라이브러리는 반응 스트림 사양을 구현한 것입니다. 반응 스트림 API는 다음과 같은 구성 요소로 구성됩니다.

  1. 출판사

  2. 구독자

  3. 서브스크립션

PublisherSubscriber 또는 Subscriber 의 여러 인스턴스에서 받은 수요에 따라 게시되는 잠재적으로 무한한 수의 시퀀스 요소를 제공합니다.

Publisher.subscribe(Subscriber) 호출에 대한 응답으로 Subscriber 클래스의 메서드에 가능한 호출 시퀀스는 다음 프로토콜에 의해 제공됩니다.

onSubscribe onNext* (onError | onComplete)?

즉, onSubscribe 가 항상 신호를 받고 그 뒤에 Subscriber 의 요청에 따라 무제한의 onNext 신호가 발생할 수 있습니다. 그 후 Subscription 가 취소되지 않는 한 실패가 있는 경우 onError 신호가, 더 이상 사용할 수 있는 요소가 없으면 onComplete 신호가 옵니다.

리액티브 스트림에 대해 자세히 알아보려면 리액티브 스트림 문서를 참조하세요.

Java Reactive Streams 드라이버 API는 Java Sync 드라이버 API 및 네트워크 I/O가 Publisher<T> 유형을 반환하도록 하는 모든 메서드를 미러링하며, 여기서 T 는 작업에 대한 응답 유형입니다.

참고

API에서 반환된 모든 Publisher 유형은 콜드 입니다. 즉, 구독할 때까지 아무 일도 일어나지 않습니다. 따라서 Publisher 를 생성하는 것만으로는 네트워크 I/O가 발생하지 않습니다. Publisher.subscribe() 메서드를 호출할 때까지는 드라이버가 작업을 실행하지 않습니다.

이 구현의 게시자는 유니캐스트 입니다. Publisher 의 각 Subscription 는 단일 MongoDB 작업과 관련이 있으며, Publisher 인스턴스의 Subscriber 는 고유한 결과 집합을 수신합니다.

Java Reactive Streams 문서에서는 다양한 Subscriber 유형을 구현했습니다. 이는 반응 스트림에 대한 인공적인 시나리오이지만 데이터베이스 의 상태 를 보장하기 위해 다음 예제를 시작하기 전에 한 예시 의 결과를 차단 합니다. 모든 사용자 지정 구독자 구현에 대한 소스 코드 를 보려면 다음을 참조하세요.SubscriberHelpers.java 운전자 소스 코드 에 있습니다.

  • ObservableSubscriber
    기본 구독자 클래스는 ObservableSubscriber<T> Subscriber Publisher<T>입니다. 의 결과를 저장하는 입니다. 또한 await() 메서드가 포함되어 있으므로 다음 예제로 진행하기 전에 데이터베이스의 상태를 확인하기 위해 결과를 차단할 수 있습니다.
  • OperationSubscriber
    구독 시 Subscription.request() 를 즉시 호출하는 ObservableSubscriber 의 구현입니다.
  • PrintSubscriber
    Subscriber.onComplete() 메서드가 호출될 때 메시지를 출력하는 OperationSubscriber 의 구현입니다.
  • ConsumerSubscriber
    OperationSubscriber 이(가)Consumer Consumer.accept(result) Subscriber.onNext(T result) 호출될 때 을(를) 사용하고 를 호출하는 의 구현입니다.
  • PrintToStringSubscriber
    Subscriber.onNext() 메서드가 호출될 때 result 의 string 버전을 출력하는 ConsumerSubscriber 의 구현입니다.
  • PrintDocumentSubscriber
    Subscriber.onNext() 메서드가 호출될 때 Document 유형의 JSON 버전을 출력하는 ConsumerSubscriber 의 구현입니다.

Subscriber 유형에는 SubscriberonComplete() 메서드가 호출될 때만 해제되는 래치가 포함되어 있으므로 해당 래치를 사용하여 await 메서드를 호출하여 추가 작업을 차단할 수 있습니다. 다음 두 가지 예에서는 자동 요청 PrintDocumentSubscriber 를 사용합니다.

첫 번째 차단은 비블로킹이고 두 번째 차단은 Publisher 가 완료될 때까지 대기합니다.

// 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

일반적으로 Publisher, SubscriberSubscription 유형은 낮은 수준의 API를 구성하며 사용자와 라이브러리는 이러한 인터페이스만 사용하기보다는 이를 기반으로 더 표현력이 풍부한 API를 구축할 것으로 예상됩니다. 이러한 인터페이스만 구현하는 라이브러리로서 사용자는 반응 스트림의 핵심 설계 원칙인 이러한 성장하는 에코시스템의 이점을 누릴 수 있습니다.

돌아가기

POJO CRUD 작업 예시