经过近3年的打磨,我们自研的企业基础应用框架基本成型,并且在多家规模企业中全面落地,从最新的统计数据来看,经过一年的上线应用,某省港集团在平台中管理的运营流程接近600/审批事项接近73w,业务消息量就更多了,整个体系以微应用的形式存在,形成了16大微应用集群来支撑整个系统的运转。这其中大量的服务协同就是由消息中间件转发完成。
rocketmq作为阿里开源的java版消息平台,确实值得抽时间分析下源码,不管怎样,转入了java方向后,有更多的组件在对我们开放,给了我们深入理解基础原理的机会。
rocketmq具体说明请参照源码中携带的doc项目,里边有完整的概念/架构/使用用例等内容。由于我们的平台当前集成的是rabbitmq,后续希望改造成可插拔式的集成方案,能根据客户的实际情况启用不同的消息中间件,最起码需要先集成rabbitmq与rocketmq。
基于我们的需求,我们将需要对相关组件的基本概念进行梳理:
- rabbitmq:
1.1集群实现:
rabbitmq支持普通集群与镜像集群两种模式,具体内容请自行查找相关的具体方案。
1.2基本概念:
本章将以我们内部使用的概念为中心进行分析,详细概念请自行查阅相关内容。
1.2.1简单模型(主题模式)
1.2.2概念说明
生产者:生成消息应用,一般是业务系统,在需要发送相关消息时,调用rabbitmqsdk发送消息到rabbitmq 服务器。
消息主题:在发送消息时,消息模型中携带的主题信息。
交换机:当消息达到rabbitmq服务器后,将消息提交到交换机中,由交换机基于消息主题订阅绑定信息投递到相应的消息队列中。绑定的消息主题支持通配符,使相关的队列能分层接收相应主题的消息。
消息队列:基于消费者的订阅信息,形成不同的消息存储区域,保证消息的先进先出。一个消息队列可以基于主题的通配符能力,形成分级的消息主题订阅模式。
基于消息的应用场景:在我们的产品中,存在两类需要消息来驱动的事项,业务消息构建消息/业务编排消息。业务消息构建消息是为消息中心数据生成服务的,我们的平台采用了分布式业务消息构建,业务平台不直接关联消息中,而是作为消息生产者发送消息到消息中间件,再由消费者完成业务数据的填充后形成最终的业务消息存储到消息中心。业务编排消息是业务平台的一个分布式业务集成扩展点,当具体的业务需要基于业务编排消息驱动时,可以开发一个消息消费插件订阅相应的消息,实现业务平台的无感知平行延展.
消费者:基于相应的业务需要,订阅不同的消息主题与不同层次的消息主题,并实现具体的业务处理。在平台中我们构建了标准的消息消费插件,主要是用于生成业务消息的待办/已办/发起/通用消息的消费者标准插件。在业务推广过程中,如果需要基于业务编排消息完成事项驱动,将面向具体的业务定制相关的消费者插件。
数据存储:数据按照队列进行存储。
多库支持:采用虚拟路径来区域不同的存储库。
1.3我们的具体使用:
我们在业务平台中开放了业务消息与业务编码消息的发送工序,最终形成了标准消息消费插件+业务定制消费插件。完成了消息中心数据生成/流程流转过程中业务分布式集成方案。工作流库终于完全独立,正面向企业统一流程平台发展。
- rocketmq:
2.1集群实现:
rocketmq在大数据需求下诞生,原始架构中就支持集群部署。
命名服务+代理服务的组合模式,让消息存储形成了天然分区存储,需要的时候可以平行扩展代理服务来支撑更大的数据处理需求。
2.2基本概念
2.2.1架构图
2.2.2概念说明
生产者:业务系统,当需要发送消息时,调用Rocketmq客户端发送消息到broker中。在我们的产品中主要时工作流平台/业务服务平台。
消息者:基于消息的驱动插件,根据业务系统的需求,对消息的消费并驱动业务推进。在我们的产品中主要是标准服务组件/定制服务组件等。消息者有消费模式,用于是集群消费还是广播消费。
消息主题:用于区分消息的内容,rocketmq中主要用主题来区分消息。
消息Tags:消息的一个扩展,可以用于控制特定主题消息队列下的特定范围消费。消息主题与消息tags的组合可以实现Rabbitmq的消息主题通配符能力。
命名空间:类似于Rabbitmq的虚拟路径,用于对消息进行隔离。
NameServer:
Broker Server:消息服务节点,
IndexFile:
CustumeQueueIndex: 特定消费主题队列索引,Rabbitmq为了节省消息存储空间,消息采用了标准块存储,对外使用采用索引文件进行管理。
Store:
2.3我们可能应用
基于我们的需要,我们可能需要在Rabbitmq的基础上进行一定的调整,这种调整主要是rocketMQ的topic不支持通配符订阅,但提供了Tags的过滤方案。其他的内容基本一致,整体来看引入成本并不太高。重新开放与定义我们的消息基础spi,再基于不同的消息中间件进行适配即可。
- 使用对比