Retain As Published Retain As Published 同样只有 0 和 1 两个可取值,为 1 表示服务端在向此订阅转发应用消息时需要保持消息中的 Retain 标识不变,为 0 则表示必须清除。Retain As Published 与 No Local 一样,同样也是主要适用于桥接场景。我们知道当服务端收到一条保留消息时,除了将它存储起来,还会将它...
mqttSubscription.setQos(1);// 设置订阅选项No Local。mqttSubscription.setNoLocal(true);// 设置订阅选项Retaion As Published。mqttSubscription.setRetainAsPublished(true);// 设置订阅选项Retain Handling。mqttSubscription.setRetainHandling(1);MqttClientmqttClient=newMqttClient(host, clientId,newMemoryPersisten...
Retain Handling (Bit 5, 4):用于指示当订阅建立时,服务端是否需要向此订阅发送保留消息。 Retain As Published (Bit 3):用于指示服务端在向此订阅转发应用消息时是否需要保持消息中的 Retain 标志。 No Local (Bit 2):用于指示服务端是否可以将应用消息转发给该消息的发布者。No Local 和 Retain As Published ...
mqttSubscription.setQos(1);// 设置订阅选项No Local。mqttSubscription.setNoLocal(true);// 设置订阅选项Retaion As Published。mqttSubscription.setRetainAsPublished(true);// 设置订阅选项Retain Handling。mqttSubscription.setRetainHandling(1);MqttClientmqttClient=newMqttClient(host, clientId,newMemoryPersisten...
订阅选项的第 3 位表示保留为已发布(Retain As Published)。若该值为 1,服务器须将转发消息的 RETAIN flag 设为与接收到的 PUBLISH 报文的 RETAIN flag 一致。若该值为 0,不管接收到的 PUBLISH 报文中的 RETAIN flag 是何值,服务器都需将转发消息的 RETAIN flag 置为 0。
Retain As Published,用于指示服务端向该订阅转发消息时是否需要保留其中的 Retain 标志。 Retain Handling,用于指示订阅建立时服务端是否需要向该订阅发送保留消息,这个选项有三个可取值: 设置为 0,只要订阅建立,就发送保留消息。 设置为 1,只有在订阅建立时该订阅当前不存在才发送保留消息。
针对上述情况多个服务端桥接的时候,会衍生一个问题,比如服务端A向服务端B订阅了主题,当服务端B收到一个保留消息向服务端A转发的时候清除retain标识,导致服务端A收到该保留消息后只会转发给订阅者,不会保存保留消息,在MQTT 5.0中,提供了 Retain As Published 的订阅选项,如果该选项设置为0,就是默认的逻辑,如果设...
该版本中我们还对订阅选项进行了支持。支持了对 No Local flag、Retain as Published flag 和 Retain Handling 的设置。测试时,您可以使用这些订阅选项来改变服务端的行为。 在后续版本中我们还将继续支持订阅标识符等 MQTT 5.0 中的新特性。 更顺畅的使用体验 ...
Console.WriteLine($"客户端[{e.ClientId}]>> 主题:{e.ApplicationMessage.Topic} 负荷:{Encoding.UTF8.GetString(e.ApplicationMessage.Payload)} Qos:{e.ApplicationMessage.QualityOfServiceLevel} 保留:{e.ApplicationMessage.Retain}"); }privatestaticvoidMqttNetTrace_TraceMessagePublished(objectsender, MqttNet...
IMessagesStore.StoredMessage toStoreMsg = asStoredMessage(msg); toStoreMsg.setClientID(clientID); this.publisher.publish2Subscribers(toStoreMsg, topic, messageID); sendPubAck(clientID, messageID); if (msg.fixedHeader().isRetain()) {