reactive streams test
This commit is contained in:
24
reactive-test/pom.xml
Normal file
24
reactive-test/pom.xml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>org.example</groupId>
|
||||||
|
<artifactId>reactive-test</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.reactivestreams</groupId>
|
||||||
|
<artifactId>reactive-streams</artifactId>
|
||||||
|
<version>1.0.3</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>11</maven.compiler.source>
|
||||||
|
<maven.compiler.target>11</maven.compiler.target>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
</project>
|
||||||
8
reactive-test/src/main/java/Application.java
Normal file
8
reactive-test/src/main/java/Application.java
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
public class Application {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
MyPublisher publisher = new MyPublisher();
|
||||||
|
MySubscriber subscriber = new MySubscriber();
|
||||||
|
|
||||||
|
publisher.subscribe(subscriber);
|
||||||
|
}
|
||||||
|
}
|
||||||
18
reactive-test/src/main/java/MyPublisher.java
Normal file
18
reactive-test/src/main/java/MyPublisher.java
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import org.reactivestreams.Publisher;
|
||||||
|
import org.reactivestreams.Subscriber;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class MyPublisher implements Publisher<Integer> {
|
||||||
|
|
||||||
|
Iterable<Integer> its = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void subscribe(Subscriber<? super Integer> subscriber) {
|
||||||
|
System.out.println("구독 신청");
|
||||||
|
System.out.println("구독 정보 생성");
|
||||||
|
MySubscription subscription = new MySubscription(subscriber, its);
|
||||||
|
System.out.println("구독 정보 생성완료");
|
||||||
|
subscriber.onSubscribe(subscription);
|
||||||
|
}
|
||||||
|
}
|
||||||
37
reactive-test/src/main/java/MySubscriber.java
Normal file
37
reactive-test/src/main/java/MySubscriber.java
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
import org.reactivestreams.Subscriber;
|
||||||
|
import org.reactivestreams.Subscription;
|
||||||
|
|
||||||
|
public class MySubscriber implements Subscriber<Integer> {
|
||||||
|
|
||||||
|
private Subscription s;
|
||||||
|
private final int SIZE = 5;
|
||||||
|
private int bufferSize = SIZE;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSubscribe(Subscription subscription) {
|
||||||
|
System.out.println("구독 정보 받음");
|
||||||
|
this.s = subscription;
|
||||||
|
s.request(bufferSize); // 요청 개수
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNext(Integer integer) {
|
||||||
|
System.out.println("구독 데이터 전달 : " + integer);
|
||||||
|
bufferSize--;
|
||||||
|
if (bufferSize == 0) {
|
||||||
|
System.out.println("하루 지남");
|
||||||
|
bufferSize = SIZE;
|
||||||
|
s.request(bufferSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(Throwable throwable) {
|
||||||
|
System.out.println("구독 에러");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onComplete() {
|
||||||
|
System.out.println("구독 완료");
|
||||||
|
}
|
||||||
|
}
|
||||||
33
reactive-test/src/main/java/MySubscription.java
Normal file
33
reactive-test/src/main/java/MySubscription.java
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import org.reactivestreams.Subscriber;
|
||||||
|
import org.reactivestreams.Subscription;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
public class MySubscription implements Subscription {
|
||||||
|
|
||||||
|
private Subscriber s;
|
||||||
|
private Iterator<Integer> it;
|
||||||
|
|
||||||
|
public MySubscription(Subscriber s, Iterable<Integer> it) {
|
||||||
|
this.s = s;
|
||||||
|
this.it = it.iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void request(long l) {
|
||||||
|
while(l > 0) {
|
||||||
|
if (it.hasNext()) {
|
||||||
|
s.onNext(it.next());
|
||||||
|
} else {
|
||||||
|
s.onComplete();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
l--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cancel() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -16,7 +16,7 @@ public class MyFilterConfig {
|
|||||||
@Bean
|
@Bean
|
||||||
public FilterRegistrationBean<Filter> addFilter() {
|
public FilterRegistrationBean<Filter> addFilter() {
|
||||||
FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>(new MyFilter(eventNotify));
|
FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>(new MyFilter(eventNotify));
|
||||||
bean.addUrlPatterns("/*");
|
bean.addUrlPatterns("/sse");
|
||||||
return bean;
|
return bean;
|
||||||
}
|
}
|
||||||
@Bean
|
@Bean
|
||||||
|
|||||||
Reference in New Issue
Block a user