0

我有 2 个程序 A、B。如果 A 完成,我希望 B 知道并开始运行,使用来自 A 结果的数据。

A 是一个 .NET Web 应用程序。我认为这并不是一直都在记忆中,对吧?只有在浏览器请求时才活着,对吧?

之前,A 和 B 是同一个程序的 2 个函数。但是 B 程序有时会因为业务原因而失败。而且即使B没有失败,也很费时间,让客户等待太久,不开心。所以我把B分开了。客户使用 A 顺利且满意。B 在后台做工作人员。

我目前的设计是:当 A 完成时,A 将数据保存到数据库中。B是一个windows服务。它每 5 分钟检查一次数据库,并在找到新作业时开始运行。A、B不认识。

老板问为什么闲置5分钟?我回答是因为这是实现我们某些业务的最简单方法。我没有设计太多。

所以我去阅读材料,发现这Observer Pattern似乎是我想要的。看了几遍,觉得Observer Pattern只能应用到同一个程序中的类,类和对象都在内存中。

我不确定我的问题是:可以GOF Design Patterns应用于不同的程序吗?

或者:像 RabbitMQ 这样的东西是如何实现这种实时处理的需求的?

我无法想象将 5 分钟的检查间隔设置为非常小的时间段。这对cpu来说是很大的负担。

编辑:我已经对Observerand进行了这个解释Publish/Subscribe,我认为这对那些从搜索中看到这个线程的人很有用。

http://addyosmani.com/resources/essentialjsdesignpatterns/book/#observerpatternjavascript

观察者模式和发布/订阅模式的区别

观察者模式要求希望接收主题通知的观察者(或对象)必须将此兴趣订阅到触发事件的对象(主题)。

然而,发布/订阅模式使用主题/事件通道,该通道位于希望接收通知的对象(订阅者)和触发事件的对象(发布者)之间。此事件系统允许代码定义应用程序特定事件,这些事件可以传递包含订阅者所需值的自定义参数。这里的想法是避免订阅者和发布者之间的依赖关系。

这与观察者模式不同,因为它允许任何订阅者实现适当的事件处理程序来注册和接收发布者广播的主题通知。

4

3 回答 3

1

您说得对,观察者模式更多地用于设计 OO 类。可以在程序之间工作的一种模式是发布-订阅模型,我认为这很适合您的描述。进程 B 订阅由 A 触发的某些事件。这通常由服务架构进行调解;例如,进程 A 和 B 是 Web 应用程序(或 WCF/MVC/Web API),还有第三个应用程序调解发布-订阅模式。所以当 A 完成时,它会向 pub-sub 服务发送一个事件;并且 pub-sub 服务向该事件的所有订阅者(在您的情况下为应用程序 B)发送通知。

你可以自己实现这个模式;还有 .NET 框架,例如实现它的NServiceBus 。

于 2012-06-13T04:01:36.550 回答
0

应用程序之间观察者模式的类似机制是使用远程方法调用远程过程调用(因此在 java 中调用)。在 .Net 中,它应该位于:Windows Communication Framework

应用程序 A 通过 WCF 向应用程序 B 发送(异步)消息。应用程序 B 也有可能首先将自己注册为消息收件人,但万一 A 不时崩溃,这不是最好的选择。

于 2012-06-13T04:30:59.000 回答
0

使用“拉动模型”效率低下,浪费资源。发布-订阅模型是更好的选择。在此 链接中,您可以看到将指导您的说明。这些示例是用 Java 编写的,但很容易实现 .net。

于 2012-06-13T04:16:05.227 回答