实现远程事件驱动系统需要哪些元素? - 需要概述

时间:2011-01-27 00:20:33

标签: delphi events distributed

我正在尝试设计一个事件驱动的系统,其中系统的元素通过生成由系统的其他组件响应的事件来进行通信。组件旨在彼此独立 - 或者尽可能独立于我可以制造它们。该系统最初将在Windows 7上实现,并且正在用Delphi编写。生成的事件将由Delphi代码生成。我理解如何在一台机器上实现所述类型的系统。

我希望设计这个系统,以便它可以很容易地部署在不同的机器架构上,特别是在分布式架构上运行的不同组件,这可能与Windows 7不同。不需要系统进行通信任何系统外部的任何系统。

我尝试过调查我需要考虑的架构并查看下面提到的问题。这些似乎指向利用命名管道作为硬件间通信的机制。作为这些调查的结果,我概述了以下内容来描述我的系统 - 图表的第一部分是我正在开发的系统;我推断的第二部分是将来可能实现的。 Design sketch

这导致了以下几点:

  1. 您可以通过命名管道传递事件吗?
  2. 这是解决这个问题的合适而明智的结构吗?
  3. 有更好的选择吗?
  4. 我忘记了什么(在这个粒度级别)?
  5. How is event driven programming implemented? How do I send a string from one instance of my Delphi program to another?

    修改

    我没有充分考虑“@I给出垃圾答案”的回应。我对他的观点的初步回应是:

    1. 同步v异步 - 主要是异步
    2. 事件将始终位于FIFO队列中。
    3. 连接丢失 - 并不是非常重要 - 我可以负担得起非严格的处理。
    4. 无界队列是处理传递事件的绝佳方式(如果可以的话) - 没有期望大量的事件生成。

4 个答案:

答案 0 :(得分:3)

为了获得最大的部署灵活性(独立于操作系统),我建议您查看在Java平台上运行的流行的开源消息代理。使用标准协议。它们与Delphi和其他编程语言很好地集成,可以与Web应用程序一起使用,并且拥有大量安装的用户群和活跃的社区。

它们可以在几分钟内轻松安装和配置,并且可以使用Delphi的免费/商业客户端。

一些例子是:

我还推荐Martin Fowler的“企业集成模式”一书作为概述和介绍,有许多简单的方法来处理特定的问题。


请注意,我是企业邮件系统的商业Delphi客户端的开发人员,例如xmlBlaster,RabbitMQ,Amazon Simple Queue Service和上面提到的三个代理。

答案 1 :(得分:2)

我只能在这里回答你的观点4:你还没有决定一个事件是同步还是异步。在异步情况下,您必须决定在邮件到达时要执行的操作。你有队列吗?队列有多大?可以抓取队列中的任意元素,还是严格的FIFO。如果消息丢失(有人绕过网络电缆)会发生什么?

在同步变体中,优势在于您获得了送货保证,但是当连接突然丢失时您会怎么做?

连接丢失将成为一个问题。你拥有的机器越多,它们发生的可能性就越大。决定你将如何处理。

如果你有一个大型活动和一些小活动,你可能会遇到另一个麻烦。传输FIFO的顺序还是最小的?活动可以重新排序吗?这里有什么假设?


除此之外,我经常攻击Erlang。在Erlang中,所有事件处理都已经解决,但这也意味着为您选择了特定的模型(异步,无界队列,无法保证传输,但检测到连接丢失)。

答案 2 :(得分:1)

我建议看看RabbitMQ,http://www.rabbitmq.com/。它有服务器和客户端。只需要在delphi中使用一些包装代码,您就可以构建业务逻辑了

干杯

答案 3 :(得分:0)

这可能只是一个消息队列的应用程序。

http://msdn.microsoft.com/en-us/library/ms632590(v=vs.85).aspx