diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/AbstractTwitterMessageSource.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/AbstractTwitterMessageSource.java index 6db2858d7a..5d12130fe1 100644 --- a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/AbstractTwitterMessageSource.java +++ b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/AbstractTwitterMessageSource.java @@ -20,8 +20,10 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Queue; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; import org.springframework.beans.factory.BeanFactory; import org.springframework.integration.Message; @@ -52,6 +54,12 @@ import org.springframework.util.StringUtils; */ @SuppressWarnings("rawtypes") abstract class AbstractTwitterMessageSource extends AbstractEndpoint implements MessageSource { + + private volatile long lastPollForTweet; + + private final CountDownLatch latch = new CountDownLatch(1); + + private final TwitterPollingTask twitterPoller = new TwitterPollingTask(); private volatile MetadataStore metadataStore; @@ -122,8 +130,23 @@ abstract class AbstractTwitterMessageSource extends AbstractEndpoint implemen } } - public Message receive() { + public Message receive() { Tweet tweet = this.tweets.poll(); + if (tweet == null){ + long currentTime = System.currentTimeMillis(); + long diff = currentTime - lastPollForTweet; + lastPollForTweet = currentTime; + if (diff < 15000){ + try { + long waitTime = 15000-diff; + this.latch.await(waitTime, TimeUnit.MILLISECONDS); + } catch (Exception e) { + //ignore + } + } + twitterPoller.run(); + } + tweet = this.tweets.poll(); if (tweet != null) { this.lastProcessedId = tweet.getId(); this.metadataStore.put(this.metadataKey, String.valueOf(this.lastProcessedId)); diff --git a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/ignored/TestReceivingUsingNamespace-context.xml b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/ignored/TestReceivingUsingNamespace-context.xml index c16fa60c02..585acb0ff6 100644 --- a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/ignored/TestReceivingUsingNamespace-context.xml +++ b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/ignored/TestReceivingUsingNamespace-context.xml @@ -27,12 +27,12 @@ - - - - - - + + + + + + @@ -44,15 +44,15 @@ - - - - + + + + - - - - + + + + diff --git a/spring-integration-twitter/src/test/java/twitter.receiver.properties b/spring-integration-twitter/src/test/java/twitter.receiver.properties index 047c1b547a..869caa3956 100644 --- a/spring-integration-twitter/src/test/java/twitter.receiver.properties +++ b/spring-integration-twitter/src/test/java/twitter.receiver.properties @@ -1,5 +1,5 @@ # oauth setup for prosibook twitter account -twitter.oauth.consumerKey= -twitter.oauth.consumerSecret= -twitter.oauth.accessToken= -twitter.oauth.accessTokenSecret= \ No newline at end of file +twitter.oauth.consumerKey=OU4CbkHKIWl1SI0VwiOgAQ +twitter.oauth.consumerSecret=p6pPukUG6d0ebSXuLSI9iaq2MIpzxJoLZyj6ilRmO3o +twitter.oauth.accessToken=61091649-vWVUNginOL069jjpm2lHEuxGXjW163kK3CPNZCdcc +twitter.oauth.accessTokenSecret=dufKyVlcngRitGDFfqiTlJC5leh6lsxPaq8FbeBc \ No newline at end of file