M B 概述M B 的全称是 message broker,即“消息代理”。“消息”一词前几年比较火,消息中间件也卖的很火,当时似乎 J2EE的产品都要跟“消息”、“中间件”扯上点关系,以彰显潮流。我觉得初学者只需记住“消息”的异步性即可,也就是“消息”和传统的网络连接、远程方法调用等的最大区别,就是你一旦发出消息以后,不用再管它的死活,中间件会处理一切事务,出了问题也会通知你,这样可以更好的分离业务逻辑。把消息当成邮件的话,那么传统网络连接就是由你去送信,而中间件则好比邮局,它来提供送信服务,并且可以跨国境、跨语言,完全不用你操心(相当于中间件可以连接异构平台),使用者只需等在家门口收信。在说“代理”之前,先讲一下 M Q的基本概念。M Q即 message queue,消息队列,也就是 IBM的主打消息中间件产品,IBM几乎所有 SOA相关的产品,都是构建于 M Q之上的,没有 M Q强大的消息传输能力,那么 IBM很多产品都做不起来。在这里不赘述 M Q的功能,初学者只需把 M Q当成一个非常可靠的传输通道即可,你只要往里面放东西,M Q就会把消息传到目的地。那有了强大的 M Q还要“代理”干什么呢?如果你用过 M Q,或者类似的产品如 apache的开源 JM S产品“ActiveM Q”,就会发现,尽管用 M Q不必考虑网络连接、平台异构,但是你在配置的时候、以及使用 M Q编程的时候,都要指定目的地,比如设置 IP地址。这样的程序依旧存在很大耦合性,万一某个组件的 IP变了,所有跟他相关的组件都得改动,轻则修改配置文件、重则重写代码。这时“代理”的作用就开始凸显了。所有组件的 M Q队列都可以直接连接到 M B 上,M B 相当于一个公共服务中心。M B 接收所有消息,然后自动分析其中的内容,找到相应的目的地,进行路由转发,好比你在写信时,只需写明收信人的姓名、身份证,哪怕收信人搬到天涯海角,只要他在 M B 邮局中登记了,那 M B 就可以把信交给他,这样进一步地分离了业务和底层通信,我只需要知道业务概念上的“他”,就可以把消息交给他。此外, M B 还可以进行消息转换,这就像是自动翻译信件,我现在可以用中文写封信给本拉登,我不需要知道他具体藏在哪里,信件就会自动翻译成阿富汗的文字,送到本拉登手里。所以,代理的两个核心功能就是:“消息路由”和“消息格式转换”。M B 本质上也是一个服务总线,所有的服务组件接入到 M B 中,服务将消息塞给 M B,M B ...