package com.netflix.schlep.sim; import java.util.List; import java.util.concurrent.TimeUnit; import org.junit.Ignore; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import rx.Observable; import rx.concurrency.Schedulers; import rx.subjects.PublishSubject; import rx.util.functions.Action1; import com.netflix.schlep.Completion; import com.netflix.schlep.consumer.IncomingMessage; import com.netflix.schlep.consumer.MessageConsumer; import com.netflix.schlep.consumer.MessageHandler; import com.netflix.schlep.processor.MessageProcessors; import com.netflix.schlep.producer.MessageProducer; public class SimConsumerTest { private static final Logger LOG = LoggerFactory.getLogger(SimConsumerTest.class); @Test @Ignore public void test() throws Exception { // final MessageConsumer reader = SimMessageConsumer.builder() // .withId("test") // .withBatchSize(1) // .withMaxCount(10) // .withThrottle(500, TimeUnit.MILLISECONDS) // .build(); // // final MessageRouter dispatcher = new MessageRouter(Observable.create(reader)); // // // Async, one thread per reply, // dispatcher.addProcessor("id1", MessageProcessors.async(new Action1<IncomingMessage>() { // @Override // public void call(IncomingMessage message) { // try { // Thread.sleep(10); // } catch (InterruptedException e) { // } // LOG.info("Async : " + message); // } // }, Schedulers.newThread())); // // // Sync, reply immediately // dispatcher.addProcessor("id2", new MessageHandler() { // @Override // public Observable<Completion<IncomingMessage>> call(IncomingMessage message) { // LOG.info("Sync : " + message); // return Observable.just(Completion.from(message)); // } // }); // // // Funnel reply to writer // final MessageWriter writer = SimMessageWriter.builder().build(); // // dispatcher.addProcessor("id3", MessageProcessors.toWriter(writer)); // // Thread.sleep(TimeUnit.MINUTES.toMillis(1)); } @Test @Ignore public void testBuffer() throws Exception { PublishSubject<Integer> subject = PublishSubject.create(); subject.buffer(3, TimeUnit.SECONDS, 3) .observeOn(Schedulers.newThread()) .subscribe(new Action1<List<Integer>>() { @Override public void call(List<Integer> t1) { LOG.info("Sending batch"); for (Integer w : t1) { LOG.info(w.toString()); } } }); for (int i = 0; i < 20; i++) { Thread.sleep(10); subject.onNext(i); } Thread.sleep(TimeUnit.MINUTES.toMillis(1)); } }