利用标准的消息中间件产品功能,结合SOA服务很容易实现一个简单的消息发布订阅功能。对于消息发布订阅模式下消息中间件的异步实时,临时存储,多点发布的功能可以很好的发挥出来。首先我们看一个最简单的业务场景,门户系统产生组织数据,需要分发到采购,物流,合同等多个业务系统,传统的做法可能是门户系统通过路由服务进行多次发送,而基于消息发布订阅模式下,门户系统只需要将消息发送到ESB即可,后续由ESB对订阅了该消息的各个接收方进行准实时的数据推送。
基于该场景来看一个最简单的实现方式,当然首先是需要一个标准的消息中间件能力。
对于组织数据的分发仍然需要定义为一个标准的web
service服务,生成具体的服务接口和服务契约文件。各个数据的接收方需要根据该规范去实现该服务的接收端。
在ESB总线上新生成一个新的服务,该服务仍然需要实现所有的服务接口规范和契约。而该服务的具体实现内容为,首先是接收到具体的数据,在该数据进入到MQ后即返回给服务消费方具体的结果信息。这个时候消息在MQ中具体暂存。在MQ中消息的生成需要根据服务的订阅情况来分布生成,即一个服务有N个不同的订阅方最好方式是生成不同的待推送服务。服务实现只需要将生成的订阅服务推送到MQ即可。下一个步骤重点是MQ本身的能力和定制,即对于MQ中的消息进行解析,然后分别进行发送,对于发布出现异常的信息可以仍然保持在队列中支持后续重试。
在ESB上新生成了该服务后,需要再增加服务订阅功能,即针对某一个服务,在业务系统实现了该服务后,可以对该服务进行订阅,订阅成功后信息进入到服务订阅清单表。对于上面一步具体MQ消息的生成需要根据订阅清单进行生成。
再进一步,服务消费方应该还需要实现一个回写的服务,对于ESB进行逐个推送出现的异常或完整性校验信息可以回写到服务消费方,以方便进行后续的日志和异常监控。
基于消息中间件的异步模式可以完全实现业务系统或组件间的解耦,但是并不是所有的服务都能够通过异步的方式来解决。在消息发布订阅模式下可以进一步的实现服务的透明特性。
青春就应该这样绽放 游戏测试:三国时期谁是你最好的兄弟!! 你不得不信的星座秘密