云消息队列 RocketMQ 版支持TCP协议和HTTP协议的多语言SDK,本文为您介绍这两种协议SDK的差异和使用说明。
各版本SDK说明
云消息队列 RocketMQ 版各版本SDK和功能支持情况如下所示:
下表中的✅表示支持该功能,❌表示不支持该功能。
对比项 | ||||||
协议 | gRPC协议v2 | Remoting协议 | Remoting协议 | Remoting协议 | gRPC协议v1 | HTTP协议 |
可访问的实例 | 5.x系列实例 | 5.x系列实例 | 5.x系列实例 4.x系列实例 | 5.x系列实例 4.x系列实例 | 4.x系列实例 | 4.x系列实例 |
使用建议 | 推荐5.x gRPC SDK。
|
|
| |||
普通、顺序、事务、定时消息的发送功能 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
并发消费 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
顺序消费 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
广播消费 | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ |
流式消费(连接 Flink 等) | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ |
消息轨迹 | ✅ | ✅ | 4.5.2及以上版本支持 | ✅ | ✅ | ❌ |
✅ | ❌ | ❌ | ❌ | ❌ | ❌ | |
✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
SDK使用限制
同一个ConsumerGroup下的不同 Consumer 使用相同协议的客户端。
同一ConsumerGroup下,从Remoting协议SDK升级至gRPC协议SDK的灰度过程中的注意事项:
顺序投递的ConsumerGroup暂不支持升级。
并发投递的ConsumerGroup可以支持平滑升级,期间会有少量消息重复。
顺序投递ConsumerGroup如果同时满足以下a、b、c 三个步骤,会有顺序消费位点回退的风险:
该顺序consumerGroup先使用Remoting协议SDK运行。
因为业务需要将SDK升级为gRPC协议SDK。
将SDK回退到了Remoting协议SDK。
RocketMQ ONS TCP 2.x SDK只支持部分地域,详情请参见使用限制。
TCP协议
社区版SDK仅在迁移开源RocketMQ上云且不希望修改代码时使用,其他场景推荐您使用阿里云云消息队列 RocketMQ 版提供的商业版SDK进行接入。和社区版SDK相比,商业版SDK提供了更加丰富的功能特性并具有更高的稳定性保障。
商业版TCP协议SDK(ONS 1.x/2.x SDK)
社区版TCP协议SDK(4.x/3.x SDK)
HTTP协议
商业版HTTP协议SDK(多语言推荐)
TCP和HTTP协议SDK差异对比
TCP协议SDK和HTTP协议SDK支持的功能有所差异,请您根据业务需求提前评估需要使用的协议类型。
SDK协议类型 | TCP协议SDK | HTTP协议SDK |
选择建议 | 建议优先选择
| 备用方案选择
|
SDK使用说明
HTTP协议和TCP协议的接入点不可混用。例如,您使用TCP协议的SDK收发消息,您需要获取TCP协议的接入点接入云消息队列 RocketMQ 版服务端。
云消息队列 RocketMQ 版支持HTTP协议和TCP协议的Group ID,不同类型的Group ID不能混用。例如,使用TCP协议的SDK收发消息,则您需要创建TCP协议Group ID。
TCP协议的客户端和HTTP协议的客户端之间可以实现消息收发。但由于HTTP协议采用XML序列化,因此消息的属性、内容、Tag、Key等必须符合XML规范。否则可能造成消息发送或消费失败。
您可以自行采用Base64编码对发送的消息进行编(解)码,以适用于此类不符合XML规范的消息收发场景。
说明XML的规范详情,请参见XML语法。您也可按需使用第三方工具xml_validator校验XML语法的规范性。
TCP协议和HTTP协议在各地域均提供公网和内网接入点。生产环境默认推荐使用VPC专有网络走内网访问服务;如果需要跨地域、线下IDC、公网网络访问,且当前无法使用CEN组网,可以使用公网接入点访问服务。公网接入点需要支付额外的公网下行流量费用,具体信息,请参见公网流量定价详情。