2013-06-27 26 views
5

nó nói Suối Closed lỗiSuối Closed lỗi trong twitter4j làm thế nào để giải quyết

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); 

    } 

} 

tôi đang nhận được lỗi

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 

Nhưng cấu hình tương tự làm việc cho TwitterAPI

Trả lời

4

Twitter cung cấp cho các following reasons why you may be disconnected:

  • Một khách hàng thiết lập quá nhiều kết nối với cùng thông tin đăng nhập. Khi điều này xảy ra, kết nối lâu đời nhất sẽ bị chấm dứt. Điều này có nghĩa là bạn phải cẩn thận không chạy hai ứng dụng kết nối lại song song với cùng thông tin đăng nhập, nếu không chúng sẽ thay phiên nhau ngắt kết nối lẫn nhau.
  • Một khách hàng ngừng đọc dữ liệu đột ngột. Nếu tốc độ đọc của Tweet bị tắt đột ngột, kết nối sẽ bị đóng.
  • Một khách hàng đọc dữ liệu quá chậm. Mỗi kết nối trực tuyến được hỗ trợ bởi một hàng đợi tin nhắn được gửi tới máy khách. Nếu hàng đợi này tăng lên quá lớn theo thời gian, kết nối sẽ bị đóng.
  • Máy chủ phát trực tuyến được khởi động lại. Điều này thường liên quan đến việc triển khai mã và không thường xuyên.
  • Thay đổi cấu hình mạng của Twitter. Những sự kiện này là cực kỳ hiếm, và sẽ đại diện khởi động lại cân bằng tải hoặc mạng cấu hình lại, ví dụ.

Bạn sẽ nhận được thông tin về lý do tại sao bạn đã ngắt kết nối, but not always:

Streams có thể bị đóng cửa cho một loạt các lý do. API truyền trực tuyến sẽ cố gắng gửi thông báo cho biết lý do luồng đã bị đóng. Lưu ý rằng nếu ngắt kết nối do sự cố mạng hoặc khách hàng đọc quá chậm, có thể thông báo này sẽ không được nhận.

Tôi nghĩ rằng có lẽ bạn không đọc dữ liệu đủ nhanh - mặc dù tôi không thể nói chắc chắn. Hãy thử triển khai onStallWarning để xem bạn có nhận được bất kỳ cảnh báo gian hàng nào không, ví dụ:

@Override 
public void onStallWarning(StallWarning stallWarning) { 
    System.out.println(stallWarning); 
}