youtube : https://youtu.be/E_Bgv9upahI
비동기 이벤트 기반의 라이브러리로만 생각 했던 RxJava가 지금 이 시대 프로그래머에게 닥쳐 올 커다란 메시지라는 사실을 알게 된 지금. 현장에서 직접 느낀 RxJava의 본질인 Function Reactive Programming(FRP)에 대해 우리가 잘 아는 Java 이야기로 풀어 보고 ReactiveX(RxJava) 개발을 위한 서버 환경에 대한 이해와 SpringFramework, Netty에서의 RxJava를 어떻게 이용 하고 개발 했는지 공유 하고자 합니다.
4. 4
int a = 0;
int b = a*1;
int c = a*1;
int d = b*c;
.println(d) // 0
d
a
b c
d
b
a
Machine1
c
Machine2Actor Model
Functional Reactive Programming e.g
a = 2
.println(d) // ?
// b=2, c=2, d=4
12. 12
RxJava Hello, World!
Observable
데이터 발행 (PUSH) 하기
>> 4 3 2 1 ….. >>
PUSH
Observable<String> observable = Observable.create(
new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("Hello, world!"); // 데이터 PUSH … next
subscriber.onCompleted(); // 데이터 PUSH 이제 그만(완료) 할게..
}
}
);
13. 13
RxJava
Observer
Hello, World!
PUSH 될 데이터 구독(소비) 계획 하기
>> 4 3 2 1 ….. >>
Subscriber<String> subscriber = new Subscriber<String>() {
@Override // 구독 계획
public void onNext(String s) { System.out.println("onNext:" + s); }
@Override // 에러 계획
public void onError(Throwable e) { System.out.println("onError:"+e.getMessage()); }
@Override // 완료 계획
public void onCompleted() { System.out.println("onComplated"); }
};
14. 14
RxJava Hello, World!
// 2. PUSH 될 데이터 구독 계획
Subscriber<String> subscriber = new Subscriber<String>() {……
// 3. 구독자가 가입 되면 데이터 발행 -> 구독 (Run)
observable.subscribe(subscriber);
// 1. PUSH 데이터 생성 (Async)
Observable<String> observable = Observable.create( ……
45. 45
RxJava + Netty
public class ClientRequestHandler extends SimpleChannelInboundHandler<Object> {
private final ConcurrentHashMap QUEUE
= new ConcurrentHashMap<String, Subscriber<?>>;
public ClientRequestHandler(){
}