2011-01-14 71 views
1

这是场景。出于多种原因,我有一个可以与服务器保持连接的应用程序。我需要从Web服务器获取或发布三个一般对象集。石英.Net架构问题

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

  2. 文件。就像它说的那样,这个同步适用于文件。文件可以上传到服务器。但更重要的是,文件可以下载到客户端。将会有服务器自动发送的文件和其他需要的文件。

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

我对Quartz很新,想要设置这3种不同的同步,我想要发生的最佳方法。我有几个问题。

  1. 如果我想要多个线程池,我只想创建3个独立的调度程序工厂吗?我如何使用配置来实现这一点,或者我需要将它编码为在工厂的每个实例化之前明确设置Quartz属性?

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

最终,我只是想弄清楚如何开始规划出这整个过程和分裂的事情分开,以便于管理和做是正确的。这是一个概念的证明,任何帮助将不胜感激。请随时批评以上任何内容。

谢谢!

+0

您确定您需要自定义线程池吗?听起来像对我来说过早优化。 – 2011-01-15 16:09:02

+0

嗯,这个想法是,虽然业务对象可能正在下载或上传,但随机文件请求可能会被快速处理。我最初考虑的是将文件请求作业设置为更高优先级,但为各个部分设置专用线程池似乎可能会在繁重的处理时间内变得更清晰和更高效。使用多个线程池有问题还是设计不好? – tc44 2011-01-17 14:29:54

回答

1

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

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

否则,您可能会有多个调度程序。这很容易,你只需要有多个独立的调度器工厂,但他们不应该共享任何状态。