diff --git a/pom.xml b/pom.xml index 06feb5e4f5..41235dcc26 100644 --- a/pom.xml +++ b/pom.xml @@ -94,6 +94,7 @@ rest-assured rest-testing resteasy + rxjava selenium-junit-testng solr-fulltext-search diff --git a/rxjava/pom.xml b/rxjava/pom.xml new file mode 100644 index 0000000000..63aa1f127e --- /dev/null +++ b/rxjava/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + + com.baeldung + rxjava + 1.0-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + + + + io.reactivex + rxjava + ${rx.java.version} + + + + + 1.2.5 + + + \ No newline at end of file diff --git a/rxjava/src/main/java/com/baelding/rxjava/ColdObservableBackpressure.java b/rxjava/src/main/java/com/baelding/rxjava/ColdObservableBackpressure.java new file mode 100644 index 0000000000..9855123a3b --- /dev/null +++ b/rxjava/src/main/java/com/baelding/rxjava/ColdObservableBackpressure.java @@ -0,0 +1,38 @@ +package com.baelding.rxjava; + +import rx.Observable; +import rx.schedulers.Schedulers; + +public class ColdObservableBackpressure { + public static void main(String[] args) throws InterruptedException { + Observable.range(1, 1_000_000).observeOn(Schedulers.computation()).subscribe(v -> ComputeFunction.compute(v), Throwable::printStackTrace); + + Thread.sleep(10_000); + + // Observable.range(1, 1_000_000) //implementation of reactive pull backpressure on cold observable + // .subscribe(new Subscriber() { + // @Override + // public void onStart() { + // request(1); + // } + // + // public void onNext(Integer v) { + // compute(v); + // + // request(1); + // } + // + // @Override + // public void onError(Throwable ex) { + // ex.printStackTrace(); + // } + // + // @Override + // public void onCompleted() { + // System.out.println("Done!"); + // } + // }); + + } + +} diff --git a/rxjava/src/main/java/com/baelding/rxjava/ComputeFunction.java b/rxjava/src/main/java/com/baelding/rxjava/ComputeFunction.java new file mode 100644 index 0000000000..924862ab37 --- /dev/null +++ b/rxjava/src/main/java/com/baelding/rxjava/ComputeFunction.java @@ -0,0 +1,43 @@ +package com.baelding.rxjava; + +import rx.Observable; + +import java.util.List; + +public class ComputeFunction { + public static void compute(Integer v) { + try { + System.out.println("compute integer v: " + v); + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + public static void compute(List v) { + try { + System.out.println("compute integer v: " + v); + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + public static void compute(Observable v) { + try { + v.forEach(System.out::println); + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + public static void compute(Long v) { + try { + System.out.println("compute integer v: " + v); + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressureBatching.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressureBatching.java new file mode 100644 index 0000000000..6acda7eaad --- /dev/null +++ b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressureBatching.java @@ -0,0 +1,18 @@ +package com.baelding.rxjava; + +import rx.schedulers.Schedulers; +import rx.subjects.PublishSubject; + +public class HotObservableBackpressureBatching { + public static void main(String[] args) throws InterruptedException { + PublishSubject source = PublishSubject.create(); + + source.window(500).observeOn(Schedulers.computation()).subscribe(ComputeFunction::compute, Throwable::printStackTrace); + + for (int i = 0; i < 1_000_000; i++) { + source.onNext(i); + } + Thread.sleep(10_000); + } + +} diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressureBuffering.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressureBuffering.java new file mode 100644 index 0000000000..50638f4c8a --- /dev/null +++ b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressureBuffering.java @@ -0,0 +1,17 @@ +package com.baelding.rxjava; + +import rx.schedulers.Schedulers; +import rx.subjects.PublishSubject; + +public class HotObservableBackpressureBuffering { + public static void main(String[] args) throws InterruptedException { + PublishSubject source = PublishSubject.create(); + + source.buffer(1024).observeOn(Schedulers.computation()).subscribe(ComputeFunction::compute, Throwable::printStackTrace); + + for (int i = 0; i < 1_000_000; i++) { + source.onNext(i); + } + Thread.sleep(10_000); + } +} diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressureSkipping.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressureSkipping.java new file mode 100644 index 0000000000..f6f8b9f563 --- /dev/null +++ b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressureSkipping.java @@ -0,0 +1,21 @@ +package com.baelding.rxjava; + +import rx.schedulers.Schedulers; +import rx.subjects.PublishSubject; + +import java.util.concurrent.TimeUnit; + +public class HotObservableBackpressureSkipping { + public static void main(String[] args) throws InterruptedException { + PublishSubject source = PublishSubject.create(); + + source.sample(100, TimeUnit.MILLISECONDS) + // .throttleFirst(100, TimeUnit.MILLISECONDS) + .observeOn(Schedulers.computation()).subscribe(ComputeFunction::compute, Throwable::printStackTrace); + + for (int i = 0; i < 1_000_000; i++) { + source.onNext(i); + } + Thread.sleep(10_000); + } +} diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableOnBackpressure.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableOnBackpressure.java new file mode 100644 index 0000000000..afef8027bf --- /dev/null +++ b/rxjava/src/main/java/com/baelding/rxjava/HotObservableOnBackpressure.java @@ -0,0 +1,18 @@ +package com.baelding.rxjava; + +import rx.BackpressureOverflow; +import rx.Observable; +import rx.schedulers.Schedulers; + +public class HotObservableOnBackpressure { + public static void main(String[] args) throws InterruptedException { + Observable.range(1, 1_000_000).onBackpressureBuffer(16, () -> { + }, BackpressureOverflow.ON_OVERFLOW_DROP_OLDEST).observeOn(Schedulers.computation()).subscribe(e -> { + }, Throwable::printStackTrace); + + Observable.range(1, 1_000_000).onBackpressureDrop().observeOn(Schedulers.io()).doOnNext(ComputeFunction::compute).subscribe(v -> { + }, Throwable::printStackTrace); + Thread.sleep(10_000); + + } +} diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableWithoutBackpressure.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableWithoutBackpressure.java new file mode 100644 index 0000000000..7745dbe5c4 --- /dev/null +++ b/rxjava/src/main/java/com/baelding/rxjava/HotObservableWithoutBackpressure.java @@ -0,0 +1,20 @@ +package com.baelding.rxjava; + + +import rx.schedulers.Schedulers; +import rx.subjects.PublishSubject; + +public class HotObservableWithoutBackpressure { + public static void main(String[] args) throws InterruptedException { + PublishSubject source = PublishSubject.create(); + + source.observeOn(Schedulers.computation()) + .subscribe(ComputeFunction::compute, Throwable::printStackTrace); + + + for (int i = 0; i < 1_000_000; i++) { + source.onNext(i); + } + Thread.sleep(10_000); + } +}