샘플 사용자 지정 구독자 구현
이 가이드 에서는 Java Reactive Streams 운전자 와 해당 비동기 API 에 대한 배경 을 제공합니다. 이 가이드 에서는 샘플 사용자 지정 구독자 구현을 나열하고 설명하기도 합니다.
참고
운전자 설치 방법에 대한 지침은 시작하기 가이드 를 참조하세요.
reactive streams
이 라이브러리는 반응 스트림 사양을 구현한 것입니다. 반응 스트림 API는 다음과 같은 구성 요소로 구성됩니다.
Publisher
는 Subscriber
또는 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
유형에는 Subscriber
의 onComplete()
메서드가 호출될 때만 해제되는 래치가 포함되어 있으므로 해당 래치를 사용하여 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
, Subscriber
및 Subscription
유형은 낮은 수준의 API를 구성하며 사용자와 라이브러리는 이러한 인터페이스만 사용하기보다는 이를 기반으로 더 표현력이 풍부한 API를 구축할 것으로 예상됩니다. 이러한 인터페이스만 구현하는 라이브러리로서 사용자는 반응 스트림의 핵심 설계 원칙인 이러한 성장하는 에코시스템의 이점을 누릴 수 있습니다.