1

这是场景。我有一个应用程序可以出于多种原因与服务器保持持续连接。我需要从网络服务器获取或发布三组通用对象。

  1. 业务数据对象。这本质上是从服务器下拉到客户端机器并存储在本地数据库中的数据。如果用户更新其本地计算机上的数据,它会被标记并需要发送到服务器以与服务器同步。大约有 6 个自定义类需要下拉数据并将数据发送到服务器(在需要时)。

  2. 文件。正如它所说,这种同步是针对文件的。文件可以上传到服务器。但更重要的是,文件可以下载到客户端。将有从服务器自动发送的文件和其他需要的文件。

  3. 连接/登录查询。这些同步将从服务器中提取用户信息,并定期检查更新信息并验证权限。还需要检查以确保应用程序已连接到服务器,如果连接丢失,则适当处理。

我对 Quartz 很陌生,并且正在尝试考虑设置我希望发生的这 3 个不同同步的最佳方法。我有几个问题。

  1. 如果我想要多个线程池,我是否只想创建 3 个单独的调度程序工厂?我将如何通过配置完成此操作,或者我是否需要对其进行编码以在每次工厂实例化之前显式设置 Quartz 属性?

  2. 业务数据对象同步有时会是最重的负载。当用户首次登录或被分配额外权限时,他们可能需要从服务器下载多达 10K 的对象/记录。这将是一种罕见的情况,理想情况下,用户会连接,数据将全部下载,5-10 分钟后他们可以使用该应用程序来达到他们的目的。这种同步需要不断地检查服务器以查看它们是否是新数据并监视本地数据以查看是否需要将新数据发送到服务器。让工厂用它自己的线程池(比如 10 个线程)来处理所有这些是否有意义?

最终,我只是想弄清楚如何最初计划整个过程并将事情分开以轻松管理并正确执行。这是一个概念证明,任何帮助将不胜感激。请随时批评上述任何内容。

谢谢!

4

1 回答 1

1

您可以通过实现来插入自定义线程池Quartz.Spi.IThreadPool。调度程序只有一个IThreadPool,但您可以在该单个接口后面屏蔽多个线程池,尽管实现需要有关正在调度的作业的信息,以便将它们派生到每个线程。

默认实现,Quartz.Simpl.SimpleThreadPool具有固定(可配置)数量的线程,所有线程都具有相同(可配置)优先级。

否则,如您所说,您可能有多个调度程序。这更容易,您只需拥有多个独立的调度程序工厂,但它们不应共享任何状态。

于 2011-01-20T00:44:28.473 回答