java - Spring MQTT : catch ConnectException

标签 java spring exception spring-integration mqtt

我有一个关于 spring 的问题。

我使用 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错误 channel 的使用。有没有办法将 ConnectException 捕获到另一个 channel 或以其他方式?

提前谢谢您。

最佳答案

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

例如,您可以使用 ApplicationEventListeningMessageProducer 捕获 ApplicationEvent 并将其发送到适当的 channel 。

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

关于java - Spring MQTT : catch ConnectException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36066471/

相关文章:

java - 使用 print 语句找出十六进制代码 "5A"的字符

JavaFX:双向绑定(bind)不更新 TextField

java - Angularjs 到 spring Controller

java - 如何将操作系统环境变量连接到 Spring Web 应用程序项目中 application.properties 中的占位符?

c++ - STL列表异常

java - 如何从返回 double 组的方法中获取所有 double 值?

java - char c = (char) -98; 如何实现?作品?

java - Spring boot JPA Hibernate 返回嵌套的 Json 对象 : Reddit style comment system

可以通过以下方式将结构转换为不同的大小吗?

java - 错误 :Execution failed for task : java. util.zip.ZipException : duplicate entry: android/support/v4/graphics/BitmapCompat. 类