通讯协议
Meta是通讯是走TCP长连接,它的的协议是基于文本行的协议,类似memcached的文本协议。通用的协议格式如下
command params opaque\r\n
[body]
其中command
为协议命令,params
为参数列表,而opaque
为协议的自增序列号,用于请求和应答的映射。客户端发送协议的时候需要自增此序列号,而服务端将拷贝来自客户端的序列号并作为应答的序列号返回,客户端可根据应答的序列号将应答和请求对应起来。body
为协议体,可选,在协议头里需要必须有字段指明body长度。
详细协议介绍
put
put topic partition value-length flag [transactionKey]\r\n[body]
发送消息协议,topic为发送的消息主题,partition为发送的目的分区,value-length为发送的消息体长度,flag为消息标识位,transactionKey为事务标识符,可选。示范:
put meta-test 0 5 0 1\r\nhello
get
get topic group partition offset maxSize\r\n
消费者拉取消息协议,topic为拉取的消息主题,group为消费者分组名称,partition为拉取的目的分区,offset为拉取的起始偏移量,maxSize为本次拉取的最大数据量大小。示范:
get meta-test example 0 1024 512 1\r\n
data
value total-length opaque\r\n data
get请求返回的应答,total-length表示返回的数据的总长度。
其中data的结构如下:
- 4个字节的消息数据长度(可能包括属性)
- 4个字节的check sum
- 8个字节的消息id
- 4个字节的flag
消息数据,如果有属性(flag的最低位为1,即 (flag & 0x1) == 1 ),则为:
- 4个字节的属性长度+ 消息属性 + payload
否则为:
- payload
示范:
get请求,得到一个没有attribute,内容是"FFFF"的消息:
value 24 -214748 \r\n \x00\x00\x00\x04 \x52\xb0\x25\xa9 \xb4\x1a\xda\x94\xd0\x00\x00\x00 \x00\x00\x00\x00 FFFF
get请求,得到一个attribute为"AAA",内容是"FFFF"的消息:
value 24 -214748 \r\n \x00\x00\x00\x0b \x55\x17\x9a\x47 \xb4\x1a\xdc\x98\x86\xc0\x00\x00 \x00\x00\x00\x01 \x00\x00\x00\x03 AAAFFF
result
result code length\r\n
通用应答协议,如返回请求结果。code为应答状态码,采用与HTTP应答状态码一样的语义。length为协议体长度,示范:
result 200 0 1\r\n
offset
offset topic group partition offset\r\n
查询离某个offset的最近有效的offset,topic为查询的消息主题,group为消费者分组名称,partition为查询的分区,offset为查询的offset,示范:
offset meta-test example 0 1024 1\r\n
stats
stats [item]\r\n
查询服务器的统计情况,item为查询的项目名称,如realtime(实时统计),具体的某个topic等,可以为空。示范:
stats 1\r\n
相关推荐
5. 多种协议支持:除了标准的MQTT、AMQP等协议,MetaQ还提供了自定义的TCP协议,以适应不同的接入需求。 三、MetaQ架构设计 MetaQ Server的架构主要包括Producer、Consumer、Broker和Controller四个主要部分: 1....
- **Java重写**:Metaq采用Java语言完全重写,利用高效的协议和通信框架,提高了性能。 - **负载均衡**:发送端支持负载均衡,能智能分配消息发送任务,避免单点过载。 - **高可用方案**:采用Master/Slave异步和...
- **透明协议设计**:MetaQ采用了文本协议设计,这种设计使得MetaQ的操作更加直观易懂,便于开发者进行监控和调试。 - **纯Java实现**:无论是通信层还是存储层,MetaQ均使用Java语言实现,这对于支付宝这样的大型...
RocketMQ的设计目标是提供低延迟、高可靠、高可扩展的消息传递服务,适用于大规模分布式系统中的消息通讯。它支持多种消息模式,如点对点(Point-to-Point)、发布/订阅(Publish/Subscribe)以及事务消息等,为企业...
RPC通信机制屏蔽了底层网络通信的细节和通信报文协议,减少了编程工作量,但并没有在运维上降低成本,文件系统客户端仍需感知服务端的存在。 考虑到传统通信方式的缺点,消息队列通信机制应运而生。消息队列的主要...
2. 纯Java实现,从通讯到存储,从client到server都是重新实现 3. 提供事务支持,包括本地事务和XA分布式事务 4. 支持HA复制,包括异步复制和同步复制,保证消息的可靠性 5. 支持异步发送消息 6. 消费消息失败,支持...
2. **服务框架与通信协议** - **Dubbo/RPC**:远程过程调用框架,用于实现微服务间的高效通信,提供高可用、高性能的服务治理。 - **MetaQ**:阿里云提供的消息中间件,用于构建分布式消息系统,支持消息队列、...
消息协议是指在消息系统中用于定义消息格式和通信规则的标准,常见的消息协议有: - **STOMP**(Simple Text Oriented Messaging Protocol):一种简单的基于帧的文本消息协议,适用于Web应用。其特点在于简单、跨...
MQTT协议适用于物联网和即时通信,能触达大量终端;TCP协议提供专业且稳定的SDK接入。 2. **管理工具**:MQ提供Web控制台、Open API和mqadmin命令集,便于进行Topic管理、发布/订阅管理、消息查询、监控报警等操作。...
**AMQP**是高级消息队列协议,它的优势在于跨语言的兼容性和对数据交互格式的标准化,允许不同语言的系统之间无缝通信。而**JMS**则专注于Java环境,提供统一的API,但限制了语言的使用范围。 在市场上,主流的MQ...
- **RocketMQ**:原为Metaq,阿里巴巴开源,提供严格的消息顺序、丰富的拉取模式和大规模扩展能力。 - **RabbitMQ**:基于AMQP协议,支持多种协议,适合企业级应用,提供了多种消息模式。 **1.4. RabbitMQ特性** ...
- 网络协议: 指定消息传输的协议,如TCP/IP。 - 心跳处理: 维持与客户端连接的活动性检测机制。 - 连接复用: 利用现有连接进行通信,以减少资源消耗。 - 超时连接: 处理长时间无响应连接的策略。 7. RocketMQ...
RocketMQ的通信组件包括网络协议、心跳处理、连接复用和超时连接处理。网络协议确保了RocketMQ节点之间的通信效率;心跳处理保证了服务的健康状态;连接复用和超时连接的处理提高了网络通信的效率和资源的利用率。 ...
阿里巴巴作为拥有庞大微服务架构的企业,其电商业务涉及众多子品牌如天猫、淘宝等,依赖Dubbo RPC进行服务间的通信,MetaQ则用于异步解耦。然而,这种架构存在服务可见性无隔离、接口级服务发现等问题,以及Java技术...
底层传输协议的选择和实现直接影响了通信的性能和可靠性。 #### 5. 通信层的整体交互 通信层需要实现高效的请求和响应处理机制。 ### 结语 RocketMQ是阿里巴巴开源的一款高性能的分布式消息中间件,对于学习和使用...
MetaQ 和 RocketMQ 是阿里巴巴开源的分布式消息系统,支持分布式事务。 总之,Kafka 以其高效、可靠和分布式的特点,成为了大数据时代实时数据处理的关键组件。无论是实时监控、日志收集还是数据集成,Kafka 都能...
- **MetaQ**(阿里巴巴):基于Zookeeper实现消息队列的高可用特性。 ### ZooKeeper的基本原理 - **数据存储**:每个服务器节点在其内存中都存储了一份数据副本。 - **Leader选举**:Zookeeper启动时,采用Paxos...
它提供了分布式系统之间的异步消息通信能力,广泛应用于各种业务场景中,如订单处理、任务异步化、系统解耦等。RocketMQ基于开源思想,代码托管于GitHub,为开发者提供了一个功能强大且可靠的消息中间件解决方案。 ...