0

我有一个小的 Spring 应用程序,它使用 Spring 社交 twitter 从 twitter 的公共 API 流式传输数据。

代码非常简单。我有一个配置类,它公开了一个 twitter 模板类型的 bean。

@Bean
Twitter getTwitterTemplate() {
    Twitter twitter = new TwitterTemplate(consumerKey, consumerSecret, accessToken, accessTokenSecret);
    return twitter;
}

我有另一个服务类,它使用 twitter 模板 bean 根据一些主题标签过滤流。我在服务 bean 的 postConstruct 中启动流式处理。

@Autowired
Twitter twitter;

@Value("${app.hashtags}")
String[] hashtags;

@PostConstruct
private void startStream() {
    FilterStreamParameters parameters = new FilterStreamParameters();

    for (String hashtag : hashtags) {
        parameters.track(hashtag);
    }

    twitter.streamingOperations().filter(parameters, tweetStreamListeners);

}

应用程序启动后,流式传输开始并且一切正常。

我的问题是如何根据某些操作停止流式传输?例如,应用程序将在调用时提供一个端点,它应该停止流处理。

4

1 回答 1

1

Stream接口有一个 close() 方法,因此您可以执行以下操作:

...
private Stream myStream;
... 
@PostConstruct
private void startStream() {
    this.myStream = twitter.streamingOperations().filter(parameters, tweetStreamListeners);

private void closeStream() {
    this.myStream.close();
}
于 2018-10-11T10:56:41.650 回答