Spring integration Spring消息驱动通道适配器:处理连接被拒绝错误

Spring integration Spring消息驱动通道适配器:处理连接被拒绝错误,spring-integration,mqtt,Spring Integration,Mqtt,我想配置我的消息驱动通道适配器,以便在以下情况下可以捕获“连接被拒绝”错误: 1) 消息代理已关闭或2)指定了错误的代理URL 我尝试使用下面的代码执行此操作,但不起作用: <int:channel id="invalidChannel" /> <int-mqtt:message-driven-channel-adapter id="myAdapter" client-id="${inbound.client.id}" url="${host

我想配置我的消息驱动通道适配器,以便在以下情况下可以捕获“连接被拒绝”错误: 1) 消息代理已关闭或2)指定了错误的代理URL

我尝试使用下面的代码执行此操作,但不起作用:

<int:channel id="invalidChannel" />

<int-mqtt:message-driven-channel-adapter 
     id="myAdapter" 
     client-id="${inbound.client.id}"
     url="${host.url}"
     topics="${inbound.topic}"
     channel="incomingChannel"
     error-channel="errorChannel"
     client-factory="clientFactory" />

<int:exception-type-router input-channel="errorChannel">
        <int:mapping exception-type="java.net.ConnectException" channel="invalidChannel" />
    </int:exception-type-router>


<int:service-activator id="ErrorActivator" 
            input-channel="invalidChannel" 
            ref="errorListener" 
            method="processError" />


<bean id="errorListener" class="com.ErrorListener"  />
有人能帮忙吗


由于连接被拒绝

错误不是消息流的一部分,因此它不由
错误通道处理。M-M-M。。。只是因为它是在任何
消息出现之前引起的

更新

从Spring集成开始,
4.2.2
MqttConnectionFailedEvent
可用于这些情况


请参阅参考手册中的更多信息:

No-op。在
MqttPahoMessageDrivenChannelAdapter
中有这样一个钩子。但是,您可以通过使用相同的
MqttPahoClientFactory
在其他组件中手动使用
client.connect(connectionOptions)
来克服它。感谢您的输入。当代理在启动应用程序时不可用时,您建议的方法将起作用。但是,如果代理在应用程序运行时发生故障,那么这将需要以其他方式进行处理—当前没有任何通知。您必须在循环中运行连接检查器。我打开了一个框架,以便在连接失败时框架发出一个
ApplicationEvent
。谢谢,@GaryRussell!这就是我今晚梦见的:-)另一个解决方法是使用一个定制的日志追加器来检测这个日志条目
logger.error(“连接或订阅”+Arrays.asList(this.getTopic()),e时出错)
public void processError(Message<MessageHandlingException> message)
    {
        System.out.println("an error / exception occured");
    }
Unable to connect to server (32103) - java.net.ConnectException: Connection refused: connect
        at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:79)
        at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:590)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.ConnectException: Connection refused: connect
        at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
        at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:579)
        at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:70)
        ... 2 more