【问题标题】:Better programming design for on demand functionality更好的按需功能编程设计
【发布时间】:2013-10-31 11:00:39
【问题描述】:

现在,我有一个像这样工作的程序。旧的遗留系统将一行放入数据库。该行是状态 0。我在 .Net 中有一个 Windows 控制台应用程序,它每 5 秒检查一次数据库,并向打印机发送打印命令。

这种架构确实消耗了大量运行控制台应用程序的计算机上的资源。本质上,有大量的空命令可以运行。仅偶尔将打印命令放入数据库中。然而,一旦数据库得到打印命令,程序就需要尽快处理它。

关于如何使这项工作更好的任何建议?我认为按需的东西可能会更好——即遗留系统向我的程序发送某种信号。不知道如何做到这一点。

任何帮助都会很棒。

【问题讨论】:

  • 那是什么样的数据库? SQL Server有一些选项,其他的不知道;
  • 如果可能,您可以将处理移至数据库并让插入触发器运行打印过程。
  • 它的效率并不高,但每 5 秒检查一次记录会消耗大量资源,这似乎令人惊讶。你确定“咀嚼”没有发生在其他地方吗?
  • 您可以使用桌子上的触发器来启动您的控制台应用程序。
  • 你们能解释一下触发器的功能吗?我从来没有使用过它们。是的,它是 SQL Server 2005 安装。我还在想,如果遗留系统能以某种方式向程序发送信号,那会有所帮助。然后程序就坐在那里,处于休眠状态,直到它收到信号,然后唤醒并处理命令。这有意义吗?

标签: .net vb.net sql-server-2005 universe


【解决方案1】:

使用消息队列?

通过 MSMQ(?) 从 SQL 向应用推送通知。从触发器创建和发送消息,或者如果适用,从存储过程创建和发送消息。消息可以像字符串一样简单。 An example can be found here

与应用直接通信相比,轻量级且对性能的损害更小。 还消除了应用程序轮询更改的需要。

下一个改进可能是将控制台应用程序更改为作为服务运行,因此它不需要 UI 并且可以预期(在范围内)始终运行。

进一步的改进可能是拆分控制台应用程序(或服务)并将性能重的部分分配到不同盒子上的专用实例。只需重新路由这些任务的消息,对 SQL 实例透明。

无需更改旧版应用程序,它允许逐渐发展出耦合度更高的可扩展解决方案。

【讨论】:

  • 好的,所以我对通知进行了一​​些研究。我想我不知道该怎么做,我很困惑。我阅读了一堆技术网文章,但我仍然感到困惑。那么 SQL 服务器会向我的程序发送通知吗?这听起来正是我所需要的,但我不确定我必须对我的 SQL 服务器做些什么才能让它开始发送通知。
  • 我不能用某种触发器来做到这一点吗?
  • SQL 服务器发送一条消息就像 [就像] 一封电子邮件,它知道地址但对读者一无所知。阅读器(您的程序)收到消息,并可以根据消息对它做一些有用的事情。看msdn.microsoft.com/en-us/library/windows/desktop/…
  • 更新了答案,提供了一个关于如何做到这一点的链接
  • ibohuizen - 我对此进行了一些研究,但在实施时仍然遇到问题。是否有在某处实施此操作的演练?我在编程端使用的是Visual Studio 2010,服务器是SQL Server 2005。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
  • 2011-09-09
相关资源
最近更新 更多