最近在拜读Martin Fowler的Enterprise Integration Pattern,对于基于消息系统的应用集成了解了不少。虽然以前的工作也涉及IBM MQ但体会总是不是很深。在不同应用,分布式环境中,的集成中,消息中间件在可靠性方面是优势。这跟我的第一印象是刚好相反的,以前总以为消息总会如同发出的信件一下,也许会石沉大海吧?哪有同步方式,比如打电话,可靠?仔细一想,其实不然。同步方式在分布式应用中依赖太多,通讯双方同时在线,网络可靠,load安全(不要被太多的Request压死了)等。这些方面消息中间件却是优势。同时消息中间件解耦了消息生产者和消费者。发送消息和接收消息的系统只要跟消息中间件打交道。
记得以前有个项目中自己实现了个消息系统,J2SE中多个应用之间通过消息通讯。主要是通过RMI和Observer模式实现。回想起来也算是分布式消息系统吧?不同的是发送方和接受方是耦合的。比如发送方(subject)维护了一个接受方的listener list(RMI 回调接口),发送消息时轮询list并RMI回调接口。
再回想起以前被面的时候,一个经理跟我谈到SOA时,不停的challenge我项目中SOA框架有啥好处。他的意思是他现在项目中用JSP,Servlet分层用的很好啊。然后我就从loosely coupling, reuse等角度来讲这个问题。SOA框架给我们解耦了Service的集成(通过ESB )。如同Spring封装了对象的创建和维护消除我们在自己程序中通过Factory,Singleton来创建对象,框架帮我们做了这部分工作。