【问题标题】:Use Paho under Spring Integration to receive binary MQTT messageSpring Integration下使用Paho接收二进制MQTT消息
【发布时间】:2018-09-08 19:16:18
【问题描述】:

我有这段代码在 Spring Integration 5.0.x / Boot 2.0 下接收 MQTT 消息。它适用于文本消息,但是当我尝试处理二进制消息时它失败了,因为发生了到 String 的转换,这会破坏内容(在这种情况下:png 图像文件)。

我怎样才能收到未篡改的消息?

我尝试在DefaultPahoMessageConverter 上发送setBytesMessageMapper,但这并没有改变任何事情。 当我使用 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();
            ...
    };
}

【问题讨论】:

    标签: java spring-integration mqtt paho spring-integration-mqtt


    【解决方案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;
    }
    

    【讨论】:

    • 谢谢 Gary,我希望这对你来说不会太无聊 ;-)
    猜你喜欢
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 2014-11-07
    相关资源
    最近更新 更多