【发布时间】:2010-01-05 17:25:56
【问题描述】:
我正在用 Java 编写一个守护程序,它接收来自多个 provider 的请求,其中 provider 将为守护进程作为线程运行。
应用架构:
- 主类
- 提供者
- 服务
- 库/模型
- 列表项
主类 基本上是加载配置文件,初始化所需的库等。一旦守护程序被初始化,它会循环遍历所有 providers 并初始化它们。之后,守护进程进入一个无限循环,不断地通过均匀分布的每个提供者,并尝试获取新的服务。
提供者 提供者基本上是第 3 方服务的适配器。这可以是电子邮件、传真、作业队列、数据库等。初始化提供程序时,它会连接到第 3 方服务。每当应用程序从提供者那里获取一个新的 service 对象时,它会检查第 3 方服务,如果它找到一个新的请求,它会对其进行解析,然后返回一个新的 service 对象到应用程序。
服务 服务基本上是一项专门的工作。当provider 收到新请求时,它会返回与该请求相关的特定服务类型。当应用程序运行一个新的服务线程时,它会处理请求然后关闭。
这是一个示例,尽管它可能永远不会被这样使用。创建了一个新的provider,用于侦听 HTTP 端口。一个新的 HTTP 请求进来要求处理一个字符串(反转它)并将其存储在反转的数据库中。一个新的请求进来,提供者将服务返回给应用程序,应用程序启动一个新的服务,其中反转字符串并更新数据库。更新后,应用程序会看到工作已完成,并能够从另一个 provider 获取新的工作。
问题: 有没有像 MVC 这样的设计模式可以处理这样的架构?我意识到 MVC 是一个非常不好用的术语,因为它包含多种模式。我想我要问的是,我要采用的方法好吗?采用 MVC 背后的概念并将其移至此应用程序是否是一个好主意?提供者是控制器,服务是与模型相关的操作?虽然在这种类型的应用程序中从来没有任何视图。
编辑:
- 守护进程异步处理请求者的请求。请求者永远不会收到直接响应。
- 应用程序是分布式的,因此您可以在任意数量的服务器上运行此守护程序。每当 provider 检索到新请求时,它都会锁定该请求,以便其他守护进程不会重复该请求。 Jeff Storey 提到了可能对此有用的 JMS。我还考虑过集成 Memcache 以在提供程序处理锁定的基础上处理锁定。
谢谢
【问题讨论】: