0

我有一个设计级别的问题,我不知道如何解决这个问题,但基本上我想要实现的是,我有一个基于控制台的应用程序,它基于输入作业执行某些任务(这是一个 XML 文件,由执行作业的所有详细信息),并且有一个基于 Web 的应用程序可以创建作业。

目前,我们手动复制 XML 文件并通过将 XML 文件作为参数传递来调用基于控制台的应用程序。

无论如何我可以设计一个应用程序,其中在基于 Web 的应用程序中创建的所有作业都传递到队列。

可能有 2 个饥饿的基于控制台的应用程序等待作业排队(以循环方式),一旦它们找到作业,它将开始执行作业。

还有一件事,我在想的是有什么方法可以从技术上控制网站上基于控制台的应用程序的数量,假设我有 50 个工作在排队,我可以启动 10 个基于控制台的应用程序来处理50 个工作而不是 2 个,所以这样可以完成工作。

如果您需要更多信息,请告诉我

提前致谢

4

1 回答 1

0

我做了如下的事情。

我有一个 Windows 服务,它是编排器,这意味着它使用 Quartz.NET 来安排任务。有 4 种类型的任务定期运行:

  • 文件注册任务:获取新的 xml 文件并将它们注册到数据库中
  • 批处理加载器:为注册文件创建批处理
  • 批次提取器:为新批次创建作业
  • 作业执行者:执行作业。

此 Windows 服务除了调度这些任务之外没有其他逻辑。作业执行器任务甚至可以并行运行多次。

实际逻辑位于从 Windows 服务中调用的(批量导入)WCF 服务中。这样,管理网站等其他应用程序能够使用批量导入 WCF 服务,以便他们可以获得文件、批次、进度等的列表,并允许对其进行操作。

作为 oj 作业执行结果执行的典型域逻辑是在专用域服务中完成的,从批量导入服务调用。

还可以设置属性以指示步骤应该是自动的还是手动的,批次是否是事务性的,等等。这种方式非常灵活,并且可以在出现问题时恢复,因为所有内容都保存在具有各种状态的数据库中。它还具有可扩展性:您可以将所有内容放在多台机器上,对 WCF 服务进行负载平衡并并行执行作业。

于 2013-04-24T08:06:15.880 回答