BizTalk Server的基本机制(一) 订阅/发布(Subscription/Publishing)
今天让我们来说说BizTalk Server的基本机制(一) 订阅/发布(Subscription/Publishing)
还是老规矩,先来说概念,再说思路,最后看截图
概念
有一次我给人做BizTalk培训。在讲BizTalk基本概念的时候,讲到:
数据整合架构的进化时,我说:数据整合的架构,从点对点,向星型进化,随后又进化为总线型。
这是就有学员问我:“总线型”和“星型”的本质区别是什么?
我们来看图:
点到点:
星型:
总线型:
听到这个问题我楞了,“星型”和“总线型”的本质区别是什么呢?是什么特质使“总线型”成为了“星型”的进化版呢?
日复一日,到了第三天,我想通了(呵呵,敬郭老师),我做出了这样的结论。二者区别在于:总线型架构中使用了订阅与发布机制。而星型架构并没有。
后来在研究ESB Toolkit的一些文档的时候得到了验证。
星型架构其实只是一种逻辑上的集中,即把点对点的数据交换程序进行物理性的集中,把这些程序强制性的放在一起。这样减少了开发,维护工作量。
但是这样做并没有解决根本问题。服务提供者与服务使用者之间的耦合性并没有降低。当服务的提供者修改了服务提供程序时,服务的调用者同样必须进行重新修改部署。
与之区别的,订阅与发布机制,成功的降低了服务提供者和使用者之间的耦合度。
当服务的提供者搭建服务的时候,并不考虑会不会有调用者,单纯的提供基本功能即可。
而服务的使用者也可以在运行期动态的寻找其所需要的服务。不用过多的关心服务提供者所提供的服务接口的具体物理位置,参数设置等等。
在服务的提供者和订阅者之间,配以动态的数据协议转换,数据格式转换,数据路由功能。
这样,就实现了服务的提供者与服务的订阅者的完全松耦合。
如果你能看懂上面的话,那么ESB相关的基本概念,我想你是肯定没有问题了,如果你看不懂上面的话,没有关系。我后面还会带来专门的关于如何使用BizTalk Server搭建企业服务总线的文章。我们慢慢来。
思路
在BizTalk的架构中,我的讲解会涉及到4个基本组件。接收端口(ReceivePort), 发送端口(SendPort),消息数据库(MessageBox),业务流程(Orchestration)。
我们来看这个图:注意图中的上述四个组件,及连接组件的红箭头。
消息的订阅和发布以消息数据库(MessageBox)为轴心进行。
消息数据库就像是BizTalk中的集市。
进入消息数据库的消息,我们叫做“发布”。具体的发布过程是:首先要有一个构架被记录,系统会记住,将来会有符合该架构的消息,进入系统。这个记录过程,就是“发布”。
把业务流程(Orchestration),发送端口(SendPort)会把消息从消息数据库(MessageBox)取走 ,这就是所谓的“订阅”。当有一个构架“发布”之后,业务流程(Orchestration)和发送端口(SendPort)可以向系统宣布:“只要系统接收到符合此构架的消息,都需要交给我”。这个过程,就是“订阅”。
所以我们来看针对于消息数据库(MessageBox)的红色箭头,接收端口(ReceivePort)向消息数据库“发布”消息。业务流程(Orchestration)即可以“发布”消息,也可以“订阅”消息,而发送端口只能“订阅”消息。
好的,如果你看到这里,我推荐你花上几分钟看着这个图,想一下这个过程。尤其是做过BizTalk业务流程开发的朋友。
订阅与发布机制,在BizTalk系统内部是如何实现的,思路就介绍到这里。
截图
我们来看看如何在真实系统内查询已经注册的发布于订阅。
首先来看订阅:
1.打开BizTalk管理控制台
2.选择要查看的BizTalk Group
3.在屏幕中央的选项卡中选择,新建查询(New Query)
4.选择 查询(Search For) 订阅(Subscription)
5.点击运行查询按钮(Run Query)
系统为我们展现了所有注册的订阅信息
我们双击某一个订阅信息,可以查看它来自于哪类服务,(图中为发送端口),单向还是双向(图中为单向),状态,等等一系列信息。
我们也可以查看该订阅的订阅条件。(关于订阅条件,我会在后面的文章《BizTalk Server的基本机制(二) 属性架构》中给大家讲解,PS,估计明天要是有空就写吧)
好的,关于订阅,我们已经可以看到了,那么发布呢?
其实,所有进入消息数据库的消息,都是发布了的消息,所以,所有部署到BizTalk Server的构架,都可以看做消息架构的发布。我们还是来看一张图吧。
1.打开BizTalk管理控制台
2.选择要查看的BizTalk Group
3.选择一个BizTalk应用程序
4.选择架构(Schemas)
5.看屏幕中将列表中显示的,就是通过该应用程序部署在系统中的架构(Schemas),当这些架构(Schemas)对应的消息进入系统,都会自动进入消息库(MessageBox),并按照消息库中记录的订阅方式,发送至订阅了该消息的发送端口(SendPort),或业务流程(Orchestration)中。
OK,今天就说到这里。
欢迎大家讨论。完全原创,转帖请务必注明出处。