package com.netflix.schlep.consumer; import java.util.concurrent.TimeUnit; import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import rx.Observable; import rx.Observable.OnSubscribeFunc; import rx.Observer; import rx.Subscription; import rx.concurrency.Schedulers; import rx.subscriptions.BooleanSubscription; import rx.util.functions.Action1; import rx.util.functions.Func1; import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Inject; import com.google.inject.Injector; import com.google.inject.Singleton; import com.netflix.schlep.Completion; import com.netflix.schlep.consumer.IncomingMessage; import com.netflix.schlep.consumer.MessageConsumer; import com.netflix.schlep.guice.SchlepModule; import com.netflix.schlep.sim.SimMessageConsumer; public class ConsumerTest { private static final Logger LOG = LoggerFactory.getLogger(ConsumerTest.class); public static final String CONSUMER_ID = "ReaderTest"; /** * @author elandau */ @Singleton public static class MyService { private MessageConsumer consumer; @Inject public MyService(MessageConsumerManager manager) { try { this.consumer = manager.get(CONSUMER_ID); } catch (Exception e) { e.printStackTrace(); Assert.fail(e.getMessage()); } this.consumer.subscribe(new MessageHandler() { @Override public Observable<Completion<IncomingMessage>> call(IncomingMessage message) { LOG.info(message.getContents(String.class)); return Observable.from(Completion.from(message)); } }); } } @Test @Ignore public void test2() throws Exception { Subscription s = Observable.create(new OnSubscribeFunc<Integer>() { @Override public Subscription onSubscribe(Observer<? super Integer> t1) { try { int counter = 0; while (true) { t1.onNext(counter++); Thread.sleep(200); } } catch (Throwable t) { System.out.println("Done in observable"); } return new BooleanSubscription(); } }).subscribe(new Action1<Integer>() { @Override public void call(Integer t1) { LOG.info(t1.toString()); } }, Schedulers.newThread()); Thread.sleep(1000); s.unsubscribe(); System.out.println("Done"); Thread.sleep(10000); } @Test @Ignore public void test() throws Exception { Injector injector = Guice.createInjector(new SchlepModule(), new AbstractModule() { @Override protected void configure() { bind(MyService.class); } }); MessageConsumerManager readerManager = injector.getInstance(MessageConsumerManager.class); readerManager.add( SimMessageConsumer.builder() .withId(CONSUMER_ID) .withBatchSize(3) .withThrottle(3, TimeUnit.SECONDS) .withMaxCount(100) .build()); injector.getInstance(MyService.class); Thread.sleep(TimeUnit.MINUTES.toMillis(1)); } }