最基础的消息队列应该具备五个模块。
通信协议:用来完成客户端(生产者和消费者)和 Broker 之间的通信,比如生产或消费。
网络模块:客户端用来发送数据,服务端用来接收数据。
存储模块:服务端用来完成持久化数据存储。
生产者:完成生产相关的功能。
消费者:完成消费相关的功能。
消息队列的核心特性是高吞吐、低延时、高可靠,所以在协议上至少需要满足:
协议可靠性要高,不能丢数据。
协议的性能要高,通信的延时要低。
协议的内容要精简,带宽的利用率要高。
协议需要具备可扩展能力,方便功能的增减。
目前业界的通信协议可以分为公有协议和私有协议两种。
公有协议指公开的受到认可的具有规范的协议,比如 JMS、HTTP、STOMP 等。
私有协议是指根据自身的功能和需求设计的协议,一般不具备通用性,比如 Kafka、RocketMQ、Puslar 的协议都是私有协议。
其实消息队列领域是存在公有的、可直接使用的标准协议的,比如 AMQP、MQTT、OpenMessaging,它们设计的初衷就是为了解决因各个消息队列的协议不一样导致的组件互通、用户使用成本高、重复设计、重复开发成本等问题。
但是,公有的标准协议讨论制定需要较长时间,往往无法及时赶上需求的变化,灵活性不足。
从功能支持、迭代速度、灵活性上考虑,大多数消息队列的核心通信协议都会优先考虑自定义的私有协议
网友评论