我一直在使用Spring一段时间才意识到我在应用程序中收到的所有传入请求都不是基于HTTP的。有些请求是基于电子邮件的,需要基于电子邮件的响应,其他请求是基于套接字的(在我的NOSQL存储中值发生变化时接收通知)。所有这些,尽管使用或多或少相同的MVC基础设施。
因此,我认为可能重新构建应用程序,以便删除控制器和HTTP基础结构之间的耦合将有所帮助。
调度程序不应再直接调用控制器方法,而是提取请求参数,并使用它们创建抽象消息(或事件),然后将其放在消息总线上。另一方面,每个控制器将为不同的事件订阅其动作(Action类的实例 - Command模式的实现)。
由于我对Spring Integration,JMS以及其他类似的东西都很陌生,我不知道选择哪种消息传递技术。此外,我很确定已经开发出这样的架构。也许,我甚至可能没有走上正确的轨道。
我接受有关如何继续的各种建议。
答案 0 :(得分:5)
对于某些集成模式有一点帮助的消息传递解决方案,这是正确的方法。
你是说电子邮件和一些NoSQL数据库已经击中了你的控制器?这意味着这些系统和控制器之间存在一些转换层。使用Spring integration,您可以使用Mail-Receiving Channel Adapter来处理传入的电子邮件,并使用TCP and UDP Support来处理NoSQL通知。 Spring MVC控制器仍可用于“真正的”Web请求,访问下面的消息通道。
每个频道适配器都有一组唯一的transformers,可将特定于适配器的message转换为canonic格式。最后,来自每个端点的邮件将routed为message channel。
的确,您的示例非常适合类似ESB的解决方案。还可以查看Mule ESB,它更加成熟和强大。