2

我是多线程应用程序的架构和设计的新手。

我该如何设计以下案例,如果存在任何设计模式,那就更好了。

我们需要设计一个可以做以下事情的windows服务。

SQL Server 数据库有两个表,称为组织和事件表,分别保存组织列表和该组织中发生的事件列表。

Windows 服务需要异步处理每个组织的事件。Windows 服务从组织表中读取组织列表并为每个组织创建一个线程。每个组织线程每 2 秒轮询一次事件表,将事件读入事件列表。当事件列表中放置/可用的东西并且调度程序对象创建并运行事件处理程序线程来处理这些事件中的每一个时,必须调用另一个对象(调度程序)。一旦事件被处理,事件处理线程应该被终止。

可以有多个事件源,将事件放在事件列表中。

使用 Delphi 2009 和 SQL Server 2008 Express 版本。

请帮忙。

4

1 回答 1

3

为什么要为每个组织创建一个线程?我能想到的唯一原因是您希望能够为每个组织配置不同的轮询时间。否则,我将只有一个轮询线程来获取自上次轮询以来的所有事件并处理这些事件。

为了处理事件,您可以使用队列和工作人员池来处理它们(看看OmnithreadLibrary,因此处理事件(这可能很耗时,我不知道)可以是多线程的。

如果您愿意,您可以确保每个组织只同时处理一个事件,尽管您应该怀疑这是否有意义。

所以,我会:

  • 1 个轮询线程来获取新事件并将它们放入队列中。
  • 1 个用于处理这些事件的队列。
  • 处理队列的任意数量的工作人员,最好基于 cpu 核心的数量而不是组织的数量。

如果您需要在整个组织中进行事件消息传递,您可能还想看看像RabbitMQ这样的工具。获取事件并立即将它们放入 RabbitMQ 可能是个好主意,之后该工具可以分发它们。

于 2013-06-28T09:27:22.620 回答