java - Play Framework 中的全局变量/跟踪打开的流

标签 java playframework-2.0 twitter4j

我现在正在使用 twitter4j 开发一个 Twitter 应用程序。基本上,我允许用户创建帐户、添加他们的个人关键字并开始他们自己的流。

我正在尝试尽可能地使用 Twitter API。避免速率限制,不要一遍又一遍地连接同一个帐户等。所以我想我需要做的是有一些对象包含所有 Activity 的 TwitterStream 对象的列表,但我不知道如何处理这个.这是启动流的 Controller 。

public static Result startStream(){ 
    ObjectNode result = Json.newObject();
    if (
        //openStreams is a Map<Long,TwitterStream> in the TwitterListener class
        TwitterListener.openStreams.containsKey(Long.parseLong(session().get("id")))
        ){
            result.put("status", "running");
            return ok(result);
    }
    Cache.set("twitterStream", TwitterListener.listener(
            Person.find.byId(
                    Long.parseLong(session().get("id"))
                    )
                )
            );
    result.put("status", "OK");
    return ok(result);          
}

如您所见,我现在将它们放入缓存中,但我希望让流长时间保持打开状态,因此缓存是不够的。

  • 为此目的构建我的应用程序的最合适方法是什么?

  • 我应该使用 Akka 吗?

  • 我如何实现 Play 的全局对象来执行此操作?

最佳答案

一旦您开始考虑在您的应用程序中引入全局状态,您就必须问问自己,我是否有可能想要扩展到多个节点,或者为了冗余目的而拥有多个节点?如果答案是肯定的,那么你应该使用 Akka,因为 Akka 将允许你通过简单地引入一个一致的散列路由器来轻松地调整你的代码以在具有 Akka 集群的多节点环境中工作。如果您不使用 Akka,那么当需要多节点时,您实际上必须重新设计您的应用程序。

因此,我将假设您希望对您的应用程序进行 future 验证,并解释如何使用 Akka(即使您不需要多个节点,Akka 仍然是一种管理全局状态的好方法)。

因此,在 Akka 中,您想要的是一个作为流管理器的 actor,如果流 actor 本身不存在,它将负责创建流 actor。然后流参与者将负责处理流,将流发送给订阅者,并跟踪有多少连接订阅了它们,并在不再有任何订阅者时关闭。

关于java - Play Framework 中的全局变量/跟踪打开的流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21805439/

相关文章:

java - IBM MQ JMS 消息监听器

java - Apache Spark 应用程序路径中的冒号

java - JPQL getResultList 转换为具有比从数据库中选择的更多属性的类

java - 渲染 Play framework 2.0.2 模板的一部分

java - JQuery TokenInput 不显示搜索结果

java - 无法为其 ID 和值每次选择时都会更改的 Web 元素单击输入文本

对必填字段进行 Javascript/Jquery 验证

android - 如何为 twitter.getAccountSettings() : Android 实现 AsyncTask

hadoop - Flume HDFS 接收器不断滚动小文件

java - 推特中的 Stream API 没有响应