【问题标题】:Asynchronous continuous polling of data from DB pushed to Java-client异步连续轮询从 DB 推送到 Java 客户端的数据
【发布时间】:2011-07-24 15:38:29
【问题描述】:

有人可以建议解决此问题的最佳方法是什么:

我喜欢做的是对数据库表进行连续轮询(或查询)。每当发生新的更新时,我都想在 Java 应用程序中将其推送到客户端。这个想法是用户可以建议他们想要订阅哪些数据,并定义一个事件处理程序来处理任何传入数据。

因此,我需要在后台进行轮询。但我似乎无法正确执行此操作。我正在考虑为本地 JVM 发布/订阅使用简单的事件总线,但我似乎无法进行异步连续轮询。

【问题讨论】:

  • 什么用户界面?摇摆还是网络?
  • 您使用的是Timer吗?
  • @Jonas 目前它只是一个 Java 库。我希望用户定义一个事件处理程序来处理他们想要订阅的事件。在发布方面,表中的新条目充当传入的事件。
  • @Larry 例如this
  • @toto 这和下面 jiggy 建议的有什么区别(即使用 ScheduledThreadPollExecutor)?

标签: java asynchronous long-polling


【解决方案1】:

您的解决方案有很多缺点。
更好的解决方案是创建负责将数据保存在数据库中并用于通知的业务逻辑。例如,您可以创建订阅 JMS 主题的应用程序。另一个组件接收处理和保存数据的调用。它存储数据,然后发送此操作的通知。所有订阅该主题的组件都会收到此通知并做出相应的反应。

【讨论】:

  • 假设他的应用也负责填充数据。
  • 谢谢,但 JMS 似乎太复杂而无法实现。有没有更简单的解决方案?这就是为什么我在考虑像code.google.com/p/simpleeventbus 这样的简单 ESB,但我一直在尝试对 DB 进行连续轮询/读取?
  • @jiggy 没错,填充数据是通过不同的应用程序发生的。我的目标是成为一个客户端应用程序,通过数据库表中的新条目连接到数据库以获取事件。
【解决方案2】:

看看java.util.concurrent。您可以使用线程池(如ScheduledThreadPoolExecutor)创建一个以给定时间间隔运行的调度程序。

【讨论】:

  • 谢谢,你知道网上有什么好的例子/示例代码吗?
  • @Larry,看看这个javadoc 是一个很好的计划工作示例。您可以读取数据库,而不是发出哔哔声。请注意,Runnable 类是为简洁而内联定义的,但它可以在它自己的 .java 文件中定义并在此处实例化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-02
  • 2013-03-05
  • 2020-07-05
  • 2012-04-11
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
相关资源
最近更新 更多