6

我使用 Spring 已经有一段时间了,我意识到并不是我在我的应用程序中收到的所有传入请求都是基于 HTTP 的。一些请求是基于电子邮件的,需要基于电子邮件的响应,其他请求是基于套接字的(当我的 NOSQL 存储中的值更改时接收通知)。所有这些,尽管使用或多或少相同的 MVC 基础设施。

因此,我认为重新架构应用程序以消除控制器和 HTTP 基础设施之间的耦合可能会有所帮助。

调度程序不应再直接调用控制器方法,而是提取请求参数,并使用它们创建抽象消息(或事件),然后将其放在消息总线上。另一方面,每个控制器都会为不同的事件订阅其动作(Action 类的实例 - 命令模式的实现)。

由于我对 Spring Integration、JMS 和其他类似的东西还很陌生,所以我不知道该选择哪种消息传递技术。另外,我很确定这样的架构已经开发出来了。也许,我什至可能都没有走上正轨。

我接受有关如何进行的各种建议。

4

1 回答 1

5

你是对的,在一些集成模式的帮助下消息解决方案是“正确”的方式。

你是说电子邮件和一些 NoSQL 数据库已经在你的控制器上?这意味着这些系统和您的控制器之间存在一些转换层。通过Spring 集成,您将使用邮件接收通道适配器来处理传入的电子邮件以及对 NoSQL 通知的TCP 和 UDP 支持。Spring MVC 控制器仍然可以用于“真正的”Web 请求,访问下面的消息通道。

每个通道适配器都有一组独特的转换器,用于将特定于适配器的消息转换为规范格式。最后,来自每个端点的消息将被路由到相同的消息通道

因此,确实,您的示例非常适合类似 ESB 的解决方案。还可以查看Mule ESB,它更加成熟和强大。

于 2011-12-18T15:34:07.823 回答