Spring MQTT集成:消息丢失

时间:2017-03-01 12:09:35

标签: spring spring-integration mqtt

我正在尝试使用spring集成来接收大量MQTT消息,处理它们然后存储在db中。

以下是代码:

@Bean
public MqttPahoClientFactory mqttClientFactory() {
    DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
    factory.setServerURIs("tcp://localhost:1883");
    return factory;
}

@Bean
public DefaultPahoMessageConverter messageConverter(){
    DefaultPahoMessageConverter converter = new DefaultPahoMessageConverter();
    converter.setPayloadAsBytes(true);
    return converter;
}

@Bean
public MessageChannel mqttInputChannel() {
    return new DirectChannel();
}


@Bean
public MessageProducer mqttInbound() {
    MqttPahoMessageDrivenChannelAdapter adapter =
            new MqttPahoMessageDrivenChannelAdapter("clientID", mqttClientFactory(), "topic1");
    adapter.setCompletionTimeout(5000);
    adapter.setConverter(messageConverter());
    adapter.setQos(2);
    adapter.setOutputChannel(mqttInputChannel());
    return adapter;
}

@Bean
@ServiceActivator(inputChannel = "mqttInputChannel")
public MessageHandler handler(){

    return new MessageHandler() {

        @Override
        public void handleMessage(Message<?> arg0) throws MessagingException {
            //process messages and storing operations   
        }
    };
}

我的问题是我无法接收所有消息并丢失其中一些消息,可能是因为我在处理程序方法中花费了大量资源和时间。我也尝试使用QueueChannel而不是DirectChannel,但是当队列已满时,问题仍然存在。 一个可能的解决方案可能是这样,停止接收,直到消息完全处理,然后重新启动它,但我不知道如何。有什么建议吗?

提前致谢。

0 个答案:

没有答案