总线(Bus)概述

总线(Bus)概述

注意,本文仅仅是一点“遐想”,没有经过任何实证,也不能保证内容是正确的,请注意甄别。

1       什么是总线?

总线有很多种,比如企业服务总线(ESB)、消息总线(Message Bus)、数据总线(Data Bus)等。

总线,可以从英文字面bus上来意会,从中文字面上反而不好意会。总线就像一条公路,上面跑着一辆辆的汽车,每辆汽车都是代表了一个对象(业务对象、消息对象、数据对象等)。

对象在通道里流转,任何人在任何时候都可以从总线上拿取对象,也可以在任何时候往总线上放进一个对象。获取对象者不需要知道对象是从何而来,放对象者也不需要知道对象往哪而去。

例如A从消息总线上获取了一个消息对象,它不需要知道消息是怎样发出来的(可能是通过TCPUDPHTTP、管道等),甚至它在获取的时候根本不知道这个消息是不是发给它的或者是否对它有用。直到它解析了消息对象,知道原来是一张销售单有修改,这时候才判断这条消息对自己是否有用。如果A正好是处理销售业务的对象,那么就进行后续的逻辑处理,否则就直接丢弃。当A进行逻辑处理时,就从数据总线上抓取销售单,然后修改,放置回数据总线上,再发送一条(销售单修改)消息到消息总线上。接着B对象是负责持久化数据的,它判断此消息是自己的工作,那么就从数据总线上抓取销售单,把它保存到数据库中。

从上面的例子我们可以总结出:

1)        总线是异步执行的;

2)        消息总线是广播模式;

2       总线体现了什么思想?

总线是一种消息驱动的思想。对象与对象之间不再耦合,而是通过总线关联起来,大家都是总线上的一个分支。当发送者把对象放到总线上之后,就不用再关心后续工作了,直接进行其它操作。获取者也不用阻塞等待,总线会主动通知获取者来对象来到,获取者只要判断消息是否有用即可。

以前的编程思想仍旧是过程化的,每一步都是层层推进,同步执行,来龙去脉清清楚楚,使用者要明白每个步骤的API,甚至要清楚其工作过程和原理。

总线把过程和原理“屏蔽”了,只留下了对象的结构定义规则和极简单的接口。对象的结构定义是可以是弱类型的,甚至用一个Hashtable存放数据,或者直接把对象序列化为字节流即可,只要发送者和获取者约定了就行。总线的接口更简单,就一个发送(set方法)和一个获取(get方法)。

 

posted @ 2010-06-30 10:56  深圳大漠  阅读(2000)  评论(0)    收藏  举报