2013-06-27 13 views
5

zu lösen, sagt sie Stream geschlossen FehlerStream geschlossen Fehler in Twitter4J wie

public class StreamAPI { 

    public static void main(String[] args) { 


     ConfigurationBuilder cb = new ConfigurationBuilder(); 
     cb.setDebugEnabled(true); 
     cb.setOAuthConsumerKey("xxxx"); 
     cb.setOAuthConsumerSecret("xxx"); 
     cb.setOAuthAccessToken("xx-xx"); 
     cb.setOAuthAccessTokenSecret("xxx"); 
     cb.setUseSSL(true); 
     cb.setUserStreamRepliesAllEnabled(true); 


     TwitterStream twitterStream = new TwitterStreamFactory(cb.build()).getInstance(); 

     AccessToken accestoken = new AccessToken("xx-xx", "xxx"); 

     twitterStream.setOAuthAccessToken(accestoken); 
     StatusListener listener = new StatusListener() { 

      public void onStatus(Status status) { 
       System.out.println("@" + status.getUser().getScreenName() + " - " + status.getText()); 
      } 

      public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) { 
       System.out.println("Got a status deletion notice id:" + statusDeletionNotice.getStatusId()); 
      } 

      public void onTrackLimitationNotice(int numberOfLimitedStatuses) { 
       System.out.println("Got track limitation notice:" + numberOfLimitedStatuses); 
      } 

      public void onScrubGeo(long userId, long upToStatusId) { 
       System.out.println("Got scrub_geo event userId:" + userId + " upToStatusId:" + upToStatusId); 
      } 

      @Override 
      public void onStallWarning(StallWarning stallWarning) { 
       //To change body of implemented methods use File | Settings | File Templates. 
      } 

      public void onException(Exception ex) { 
       ex.printStackTrace(); 
      } 
     }; 

     FilterQuery fq = new FilterQuery(); 
     String keywords[] = {"France", "Germany"}; 

     fq.track(keywords); 

     twitterStream.addListener(listener); 
     twitterStream.filter(fq); 

    } 

} 

Ich erhalte Fehler

Stream closed. 
Relevant discussions can be found on the Internet at: 
    http://www.google.co.jp/search?q=a8fd061d or 
    http://www.google.co.jp/search?q=00070a0c 
TwitterException{exceptionCode=[a8fd061d-00070a0c a8fd061d-0007099d], statusCode=-1, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=3.0.3} 
    at twitter4j.StatusStreamBase.handleNextElement(StatusStreamBase.java:199) 
    at twitter4j.StatusStreamImpl.next(StatusStreamImpl.java:57) 
    at twitter4j.TwitterStreamImpl$TwitterStreamConsumer.run(TwitterStreamImpl.java:478) 
Caused by: java.io.IOException: the end of the stream has been reached 
    at twitter4j.StatusStreamBase.handleNextElement(StatusStreamBase.java:88) 
    ... 2 more 

Aber die gleiche Konfiguration funktioniert für TwitterAPI

Antwort

4

Twitter gibt die following reasons why you may be disconnected:

  • Ein Client erstellt zu viele Verbindungen mit denselben Anmeldeinformationen. In diesem Fall wird die älteste Verbindung beendet. Das bedeutet, Sie müssen darauf achten, nicht zwei wiederverbindende Clients parallel mit den gleichen Anmeldeinformationen auszuführen, sonst werden sie abwechselnd gegenseitig trennen.
  • Ein Client hört plötzlich auf, Daten zu lesen. Wenn die Rate von Tweets, die aus dem Stream ausgelesen werden, plötzlich abfällt, wird die Verbindung geschlossen.
  • Ein Client liest Daten zu langsam. Jede Streaming-Verbindung wird durch eine Warteschlange von Nachrichten, die an den Client gesendet werden sollen, mit gesichert. Wenn diese Warteschlange im Laufe der Zeit zu groß wird, wird die Verbindung geschlossen.
  • Ein Streaming-Server wird neu gestartet. Dies hängt normalerweise mit einer Codebereitstellung zusammen und ist nicht sehr häufig.
  • Twitter Netzwerkkonfiguration ändert sich. Diese Ereignisse sind äußerst selten und würden zum Beispiel Load Balancer-Neustarts oder Netzwerk-Neukonfigurationen darstellen.

Sie sollten Sie Informationen über warum empfangen getrennt wurden, but not always:

Streams für eine Vielzahl von Gründen stillgelegt werden können. Die Streaming-API versucht, eine Nachricht zu übermitteln, die angibt, warum ein Stream geschlossen wurde. Beachten Sie, dass die Nachricht möglicherweise nicht empfangen wird, wenn die Trennung aufgrund von Netzwerkproblemen erfolgte oder wenn ein Client zu langsam gelesen hat.

Mein Gedanke wäre, dass Sie vielleicht nicht schnell genug Daten lesen - obwohl ich das nicht sicher sagen kann. Versuchen Sie, onStallWarning zu implementieren, um zu sehen, wenn Sie Stall-Warnungen erhalten, z. B.