Disruptor 试水
This commit is contained in:
parent
1eb055c662
commit
596a973514
@ -3,7 +3,9 @@ package cn.skcks.study.rxjava;
|
|||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.hutool.core.util.RandomUtil;
|
import cn.hutool.core.util.RandomUtil;
|
||||||
import cn.skcks.docking.gb28181.sip.method.register.request.RegisterRequestBuilder;
|
import cn.skcks.docking.gb28181.sip.method.register.request.RegisterRequestBuilder;
|
||||||
|
import cn.skcks.docking.gb28181.sip.method.register.response.RegisterResponseBuilder;
|
||||||
import gov.nist.javax.sip.message.SIPRequest;
|
import gov.nist.javax.sip.message.SIPRequest;
|
||||||
|
import gov.nist.javax.sip.message.SIPResponse;
|
||||||
import io.reactivex.rxjava3.core.Flowable;
|
import io.reactivex.rxjava3.core.Flowable;
|
||||||
import io.reactivex.rxjava3.core.Observable;
|
import io.reactivex.rxjava3.core.Observable;
|
||||||
import io.reactivex.rxjava3.disposables.Disposable;
|
import io.reactivex.rxjava3.disposables.Disposable;
|
||||||
@ -16,7 +18,9 @@ import org.springframework.boot.test.context.SpringBootTest;
|
|||||||
|
|
||||||
import javax.sip.ListeningPoint;
|
import javax.sip.ListeningPoint;
|
||||||
import javax.sip.message.Request;
|
import javax.sip.message.Request;
|
||||||
|
import javax.sip.message.Response;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.concurrent.TimeoutException;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@ -104,7 +108,10 @@ public class RxJavaStudyStarterTest {
|
|||||||
.map(i -> {
|
.map(i -> {
|
||||||
String callId = IdUtil.fastSimpleUUID();
|
String callId = IdUtil.fastSimpleUUID();
|
||||||
produce.getAndAdd(1);
|
produce.getAndAdd(1);
|
||||||
return requestBuilder.createNoAuthorizationRequest(callId, 3600);
|
Request request = requestBuilder.createNoAuthorizationRequest(callId, 3600);
|
||||||
|
SIPRequest sipRequest = (SIPRequest) request;
|
||||||
|
log.info("发送SIP请求: \n{}", sipRequest);
|
||||||
|
return request;
|
||||||
})
|
})
|
||||||
.cache()
|
.cache()
|
||||||
.share()
|
.share()
|
||||||
@ -121,9 +128,16 @@ public class RxJavaStudyStarterTest {
|
|||||||
Thread.sleep(RandomUtil.randomLong(10,100));
|
Thread.sleep(RandomUtil.randomLong(10,100));
|
||||||
log.info("处理SIP请求: {}", sipRequest.getCallId().getCallId());
|
log.info("处理SIP请求: {}", sipRequest.getCallId().getCallId());
|
||||||
consume.getAndAdd(1);
|
consume.getAndAdd(1);
|
||||||
|
|
||||||
|
RegisterResponseBuilder registerResponseBuilder = RegisterResponseBuilder.builder().build();
|
||||||
|
Response passedAuthorzatioinResponse = registerResponseBuilder.createPassedAuthorzatioinResponse(request);
|
||||||
|
Observable.just(passedAuthorzatioinResponse).subscribeOn(Schedulers.io()).subscribe(response -> {
|
||||||
|
SIPResponse sipResponse = (SIPResponse) response;
|
||||||
|
log.info("响应SIP请求: {}", sipResponse.getCallId().getCallId());
|
||||||
|
log.info("响应SIP: \n{}", sipResponse);
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
requestFlowable.subscribe(serverConsumer);
|
|
||||||
requestFlowable.subscribe(serverConsumer);
|
requestFlowable.subscribe(serverConsumer);
|
||||||
// requestObservable.subscribe(serverConsumer);
|
// requestObservable.subscribe(serverConsumer);
|
||||||
// requestObservable.blockingSubscribe();
|
// requestObservable.blockingSubscribe();
|
||||||
@ -131,4 +145,35 @@ public class RxJavaStudyStarterTest {
|
|||||||
Thread.sleep(TimeUnit.SECONDS.toMillis(30));
|
Thread.sleep(TimeUnit.SECONDS.toMillis(30));
|
||||||
log.info("生产数量: {}, 消费数量: {}", produce.get(), consume.get());
|
log.info("生产数量: {}, 消费数量: {}", produce.get(), consume.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
|
@Test
|
||||||
|
void timeoutTest(){
|
||||||
|
Observable<Object> observable = Observable.create(emitter -> {
|
||||||
|
Thread.sleep(50);
|
||||||
|
emitter.onNext("Hello");
|
||||||
|
Thread.sleep(200);
|
||||||
|
emitter.onNext("World");
|
||||||
|
emitter.onComplete();
|
||||||
|
});
|
||||||
|
|
||||||
|
observable = observable.timeout(100, TimeUnit.MILLISECONDS);
|
||||||
|
// observable.timeout(100, TimeUnit.MILLISECONDS, Observable.empty());
|
||||||
|
observable = observable.retry(2)
|
||||||
|
.doOnError(e -> log.error("Observable Error: ", e))
|
||||||
|
.onErrorResumeNext(throwable -> Observable.empty());
|
||||||
|
|
||||||
|
observable.subscribe(item -> {
|
||||||
|
log.info("onNext: {}", item);
|
||||||
|
}, e -> {
|
||||||
|
if(e instanceof TimeoutException){
|
||||||
|
log.info("subscribe 超时");
|
||||||
|
} else {
|
||||||
|
log.error("subscribe Error: ", e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
observable.blockingSubscribe();
|
||||||
|
Thread.sleep(1000);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user