package com.netflix.schlep.consumer; import java.util.Properties; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import javax.annotation.PostConstruct; import org.junit.Assert; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import rx.Observable; import rx.Observer; import rx.Subscription; import rx.Observable.OnSubscribeFunc; import rx.subscriptions.BooleanSubscription; import com.google.inject.AbstractModule; import com.google.inject.Inject; import com.google.inject.Injector; import com.google.inject.Singleton; import com.netflix.governator.configuration.ConfigurationProvider; import com.netflix.governator.configuration.PropertiesConfigurationProvider; import com.netflix.governator.guice.BootstrapBinder; import com.netflix.governator.guice.BootstrapModule; import com.netflix.governator.guice.LifecycleInjector; import com.netflix.schlep.Completion; import com.netflix.schlep.governator.GovernatorSchlepModule; import com.netflix.schlep.guice.SchlepModule; import com.netflix.schlep.sim.SimSchlepPlugin; public class PropertiesConfigTest { private static final Logger LOG = LoggerFactory.getLogger(PropertiesConfigTest.class); public static final String CONSUMER_ID = "consumer1"; /** * @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(final IncomingMessage message) { LOG.info(message.getContents(String.class)); return Observable.create(new OnSubscribeFunc<Completion<IncomingMessage>>() { @Override public Subscription onSubscribe(final Observer<? super Completion<IncomingMessage>> observer) { LOG.info("Observe: " + message); Executors.newSingleThreadScheduledExecutor().schedule(new Runnable() { @Override public void run() { LOG.info("Process: " + message); observer.onNext(Completion.from(message)); observer.onCompleted(); } }, 3, TimeUnit.SECONDS); return new BooleanSubscription(); } }); } }); } @PostConstruct public void init() { try { consumer.start(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @Test public void test() throws Exception { final Properties properties = new Properties(); properties.setProperty("com.netflix.schlep.consumer1.type", SimSchlepPlugin.TYPE); properties.setProperty("com.netflix.schlep.consumer1.threadCount", "4"); properties.setProperty("com.netflix.schlep.consumer1.batchSize", "10"); properties.setProperty("com.netflix.schlep.consumer1.maxCount", "100"); properties.setProperty("com.netflix.schlep.consumer1.maxBacklog", "10"); Injector injector = LifecycleInjector.builder() .withBootstrapModule(new BootstrapModule() { @Override public void configure(BootstrapBinder binder) { binder.bind(ConfigurationProvider.class).toInstance(new PropertiesConfigurationProvider(properties)); } }) .withModules( new SchlepModule(), new SimSchlepPlugin(), new GovernatorSchlepModule(), new AbstractModule() { @Override protected void configure() { bind(MyService.class); } }) .createInjector(); injector.getInstance(MyService.class); Thread.sleep(TimeUnit.SECONDS.toMillis(10)); } }