@@ -46,7 +46,18 @@ public class TwitterStream {
4646
4747 private TweetsStreamExecutor executor ;
4848
49+ private int retries ;
50+
4951 public TwitterStream () {
52+ init ();
53+ }
54+
55+ public TwitterStream (int retries ) {
56+ this .retries = retries ;
57+ init ();
58+ }
59+
60+ private void init () {
5061 initBasePath ();
5162 tweets .setClient (apiClient );
5263 }
@@ -55,6 +66,10 @@ public void setTwitterCredentials(TwitterCredentialsBearer credentials) {
5566 apiClient .setTwitterCredentials (credentials );
5667 }
5768
69+ public void setRetries (int retries ) {
70+ this .retries = retries ;
71+ }
72+
5873 public void addListener (TweetsStreamListener listener ) {
5974 listeners .add (listener );
6075 }
@@ -65,7 +80,7 @@ public void removeListener(TweetsStreamListener listener) {
6580
6681 public void sampleStream (StreamQueryParameters streamParameters ) {
6782 try {
68- BufferedSource streamResult = tweets .sampleStream (streamParameters );
83+ BufferedSource streamResult = tweets .sampleStream (retries == 0 ? 1 : retries , streamParameters );
6984 executor = new TweetsStreamExecutor (streamResult );
7085 listeners .forEach (executor ::addListener );
7186 executor .start ();
@@ -78,7 +93,7 @@ public void sampleStream(StreamQueryParameters streamParameters) {
7893 /* for this error twitter indicates that to implement a reconnection mechanism
7994 * see: https://developer.twitter.com/en/docs/twitter-api/tweets/volume-streams/integrate/handling-disconnections
8095 */
81- throw new TooManyRequestsException ("Too many requests. Service responded with 429 status code" );
96+ throw new TooManyRequestsException ("Too many requests. Service responded with 429 status code. Consider setting 'retries' or increasing its value " );
8297 }
8398 throw new StreamException ("An exception occurred during stream execution " ,e );
8499 }
0 commit comments