Используйте Paho в Spring Integration для получения двоичного сообщения MQTT
У меня есть этот код, который получает сообщения MQTT в Spring Integration 5.0.x / Boot 2.0. Он работает нормально для текстовых сообщений, но когда я пытаюсь обработать двоичные сообщения, это не удается, потому что преобразование в String
происходит, и это повреждает содержимое (в данном случае: файл изображения png).
Как я могу получить сообщение без изменений?
Я пытался setBytesMessageMapper
на DefaultPahoMessageConverter
, но это ничего не изменило. Когда я загружаю содержимое сообщений с помощью mqtt.fx, я могу доказать, что двоичное содержимое было установлено правильно, поэтому я уверен, что это проблема на принимающей стороне.
@Bean
public MessageProducer inbound() {
MqttPahoMessageDrivenChannelAdapter adapter = new MqttPahoMessageDrivenChannelAdapter("tcp://iot.eclipse.org:1883",
"foo", "bar");
adapter.setCompletionTimeout(5000);
DefaultPahoMessageConverter converter = new DefaultPahoMessageConverter();
adapter.setConverter(converter);
adapter.setQos(1);
adapter.setOutputChannel(mqttInputChannel());
return adapter;
}
...
@Bean
@ServiceActivator(inputChannel = "mqttInputChannel")
public MessageHandler handler() {
return new MessageHandler() {
@Override
public void handleMessage(Message<?> message) throws MessagingException {
System.out.println("message received on " + new Date());
Object payload = message.getPayload();
...
};
}
1 ответ
Решение
Установить payloadAsBytes
собственность на конвертер в true
...
/**
* True if the converter should not convert the message payload to a String.
* Ignored if a {@link BytesMessageMapper} is provided.
*
* @param payloadAsBytes The payloadAsBytes to set.
* @see #setBytesMessageMapper(BytesMessageMapper)
*/
public void setPayloadAsBytes(boolean payloadAsBytes) {
this.payloadAsBytes = payloadAsBytes;
}