I am using MQTT in embedded applications. I have gone through the documentation extensively and I understand how QoS feature is implemented in MQTT, and what each value means.
As it is known, MQTT does QoS downgrade, which means that a message will be delivered with the lowest QoS value between the sender and the receiver. This is understood, and for most of the QoS compinations between sending and receiving this makes sense.
However I have problem with a specific situation. What happens when a message is published with QoS 1 while a client has a subscription of QoS 2?
The message will be delivered at least once to the broker, which means that it may be delivered more than once. On the other hand the subscribing client expects that it is guaranteed to receive a message exactly once, which is not the case.
How can one overcome this serious issue? Essentially I cannot trust the QoS 2 setting.
(Note, normally this wouldn't be an issue as I could just publish the messages with QoS 2. However this becomes a problem when the publishing clients are out of your control, and there is no guarantee which QoS they will use.)