EMQX5.0 支持MQTT OVER QUIC特性,其多流模式也是一个非常诱人的特性,但是在官网未看到多流模式相关的相关示例代码,AI也未能搜到,看起来是协议上已经支持,但是应用上空白。
请问如果把MQTT OVER TCP切换到MQTT OVER QUIC后,emqx支持java业务代码使用多流模式吗?是否有使用示例?
EMQX5.0 支持MQTT OVER QUIC特性,其多流模式也是一个非常诱人的特性,但是在官网未看到多流模式相关的相关示例代码,AI也未能搜到,看起来是协议上已经支持,但是应用上空白。
请问如果把MQTT OVER TCP切换到MQTT OVER QUIC后,emqx支持java业务代码使用多流模式吗?是否有使用示例?
需要补充一些信息才能更好地帮你排查:
麻烦补充一下,谢谢。
上条里命令是 emqx ctl broker(直接贴输出就行)
5.0版本,跟部署方式没关系吧,QUIC协议的如果支持多流模式,应该是官网SDK提供功能吧
EMQX 的 MQTT over QUIC 支持单流/多流两种模式。多流模式是客户端创建多个 QUIC stream,控制流处理连接维护,数据流承载发布/订阅;每个流内保证顺序,跨流不保证。多流本身 EMQX 侧通常不需要额外开关,关键看客户端 SDK 是否支持以及流映射方式。你现在用的 EMQX 版本、部署方式,以及客户端 SDK/库是哪一个?
目前是在做技术调研,docker部署和裸机部署方式都使用了,版本是5.0.26,客户端sdk使用的是org.eclipse.paho.mqttv5
EMQX 侧是支持 MQTT over QUIC 的,多流模式就是客户端在同一 QUIC 连接里开控制流 + 多个数据流,EMQX 按流处理 PUBLISH/PUBACK 等(文档里有多流说明)。
关键点:多流是客户端 SDK 的能力,EMQX 不会自动把 Java 业务代码拆成多流。也就是说你用的 Java 客户端如果只支持单流,那连到 EMQX 还是单流;要多流必须客户端实现多流映射。
目前文档没有 Java 示例。你现在用的 Java 客户端库是什么(版本)?你希望多流按 topic / QoS / 优先级怎么映射?
目前调研部署的版本是emqx-5.0.15-otp24.3.4.2_1.el7.x86_64;
客户端侧使用的是paho的org.eclipse.paho.mqttv5的1.2.5版本sdk;
我希望是可以按照topic和优先级分不同的流,优先保证车辆远控成功率;
另外,查询ai给出的答案是目前java相关的sdk均不支持多流模式,现阶段如果想要使用多流模式,只能使用java JNI调用C语言的NanoSDK方式,是这样吗?
EMQX 侧支持 QUIC 单流/多流,但多流怎么按 topic/优先级拆分是客户端决定的,EMQX 不会自动把 Java 业务拆流。你用的 Paho mqttv5 1.2.5 目前不支持 QUIC,所以也就没有多流能力。要做多流只能换支持 QUIC 的客户端(NanoSDK C 或 NanoSDK-Java 的 JNA binding),在客户端里自行做流映射(按 topic/优先级/QoS 等)。如果你能接受用 NanoSDK-Java,我可以按你“topic+优先级”的规则给一份流映射建议和 demo。
可以接受,新项目没有历史包袱。
可以接受那就走 NanoSDK-Java。结论:EMQX 侧支持多流,但流的划分完全由客户端决定,Paho 1.2.5 不支持 QUIC/多流,所以想按 topic/优先级拆流只能用 NanoSDK(C)或 NanoSDK-Java。建议映射:控制流处理 CONNECT/PING;高优先级(远控/告警)单独一条 data stream;低优先级(遥测)单独一条;如果两个 topic 需要强顺序就放同一条流。EMQX 会在收到 PUBLISH 的同一条流回 PUBACK,订阅流收到的 PUBLISH 也要求同流回 ACK。你可以直接从 NanoSDK-Java demo 改:https://github.com/nanomq/nanosdk-java/blob/main/demo/src/main/java/io/sisu/nng/demo/quicmqtt/MqttQuicClient.java