Java
Flow API
Java 9 Flow API ile reaktif akışı öğrenirsin.
Flow API
Java 9 ile birlikte Reactive Streams uygulamaya java.util.concurrent.Flow sınıfı üzerinden eklenmiştir. Bu API, asenkron veri akışını standart üç arayüzle tanımlar: Publisher veri üretir, Subscriber veri tüketir, Subscription akışı denetler.
Akışın yönü Publisher'dan Subscriber'a doğrudur; ancak Subscriber, request ile ne kadar veri istediğini bildirir. Bu, geri basınç (backpressure) olarak bilinir ve üreticinin tüketiciden hızlı olmasını engeller. Flow API, çerçevelerin ortak bir temel üzerinde buluşmasını sağlar.
Üç arayüzün görevi
Publisher'ın tek bir yöntemi vardır: subscribe(Subscriber). Bu, bir abone kaydeder. Subscriber ise dört yöntem taşır: onSubscribe Subscription'ı alır, onNext bir öğeyi alır, onError hatayı, onComplete akışın bittiğini bildirir.
Subscription ise request(n) ile n öğe ister ve cancel ile akışı iptal eder. Bu yapı, hem senkron hem asenkron uygulamaya izin verir. Önemli olan sözleşmedir; iletimin zamanlaması uygulamaya bağlıdır.
Uygulama Senkron Publisher ile veri gönder
Bir OnePublisher sınıfı tanımla: Publisher<String> arayüzünü uygulasın. subscribe yöntemi onSubscribe çağrısı yapsın; Subscription'ın request yöntemi s.onNext("merhaba") ve s.onComplete() çağrısı yapsın. main içinde new OnePublisher().subscribe(...) ile anonim bir Subscriber oluştur; onSubscribe request(1) yapsın, onNext System.out.println ile değeri yazdırsın.
Örnek çözümü göster
import java.util.concurrent.Flow.*;
class OnePublisher implements Publisher<String> {
public void subscribe(Subscriber<? super String> s) {
s.onSubscribe(new Subscription() {
public void request(long n) { s.onNext("merhaba"); s.onComplete(); }
public void cancel() { }
});
}
}
public class FlowDemo {
public static void main(String[] args) {
new OnePublisher().subscribe(new Subscriber<String>() {
public void onSubscribe(Subscription s) { s.request(1); }
public void onNext(String v) { System.out.println(v); }
public void onError(Throwable t) { }
public void onComplete() { }
});
}
}
Kendini test et
-
Java'nın yerleşik Reactive Streams API'si hangi pakettedir?
- java.util.stream
- java.io
- java.nio
- java.util.concurrent.Flow
Cevabı göster
java.util.concurrent.Flow — Flow sınıfı Reactive Streams arayüzlerini içerir.
-
Subscriber importunu tamamla
import java.util.concurrent.____.Subscriber;
Cevabı göster
import java.util.concurrent.Flow.Subscriber;
-
Flow arayüzlerini eşleştir
- Publisher
- Veri üretir
- Subscriber
- Veri tüketir
- Subscription
- Akışı denetler
- onNext
- Öğe bildirimi
Sıradaki ders: Publisher ve Subscriber