spring mqtt:catch ConnectException

时间:2016-03-17 16:31:07

标签: java spring exception-handling spring-integration mqtt

我有一个关于春天的问题。

我使用Spring-Paho MqttPahoMessageDrivenChannelAdapter与MQTT代理建立连接。这是一个java配置部分:

@Bean
@Description("mqtt inbound adapter: receives mqtt messages")
public MessageProducer mqttInboundAdapter() {
    log.info("creating mqtt inbound adapter");
    MqttPahoMessageDrivenChannelAdapter adapter =
            new MqttPahoMessageDrivenChannelAdapter(
                    env.getProperty("mqtt.hostname")+":" +env.getProperty("mqtt.port"), 
                    "myClient",
                    "#");
    adapter.setCompletionTimeout(5000);
    adapter.setConverter(new DefaultPahoMessageConverter());
    adapter.setQos(1);
    adapter.setOutputChannel(mqttInputChannel());
    adapter.setErrorChannel(mqttErrorChannel());
    return adapter;
}

当代理关闭并且未建立连接时,将抛出ConnectException。这很棒,但我不仅要在日志中看到它的痕迹,还要收到警告电子邮件。

我希望可以在mqttErrorChannel的帮助下实现,但ConnectException is not the case使用错误渠道。有没有办法将ConnectException捕获到另一个通道或以其他方式?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

从Spring Integration 4.2.2开始,当我们丢失连接或无法在订阅时连接时,会发出MqttConnectionFailedEvent

您可以使用ApplicationEvent抓住ApplicationEventListeningMessageProducer并将其发送到相应的频道。

请参阅“参考手册”中的更多信息:http://docs.spring.io/spring-integration/reference/html/mqtt.html