I'm using MQTT with Spring Integration.
I would like to include a contentType header in the MQTT message.
I'm writing to the MQTT broker in this way:
@Bean
public IntegrationFlow outgoingMqttMsgFlow() {
return IntegrationFlows.from("outgoingMqttMsgChannel")
.enrichHeaders(headers -> headers.header(MqttHeaders.TOPIC, mqttTopic))
.enrichHeaders(headers -> headers.header(MessageHeaders.CONTENT_TYPE, "usp.msg", true))
.handle(new MqttPahoMessageHandler(mqttBroker, UUID.randomUUID().toString())).get();
}
When I see the MQTT messages in RabbitMQ I see this:
This is, it seems that content type header is not being included in the message (only x-mqtt-dup and x-mqtt-publish-qos).
Am I doing something wrong?
Thanks in advance.
CodePudding user response:
MQTT v3 has no concept of "headers"; those headers are just the rabbitmq MQTT plugin's mechanism to handle QOS.
You would need to embed the content type in the payload somehow.
CodePudding user response:
MQTT does not have headers but properties, but they represent a similar concept.
MQTT properties are supported since version v5.
If you want to be able to map Spring Integration headers into MQTT properties you have to use Mqttv5PahoMessageHandler.
There is an example in https://docs.spring.io/spring-integration/reference/html/mqtt.html
Finally, take into account that since RabbitMQ does not support MQTT v5, it neither supports MQTT properties. Use Mosquitto instead.

