2015-11-05 121 views
1

我想配置我的消息驅動通道適配器,以便我可以抓取'連接被拒絕'錯誤的情況下: 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" /> 

中的processError()方法的定義如下:

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 

是否有人可以幫忙嗎?

問候

回答

1
Connection refused

誤差不是消息流的一部分,所以它不被errorChannel處理。 M-m-m ...只是因爲它是在任何Message出現之前引起的。

UPDATE

與Spring集成4.2.2MqttConnectionFailedEvent開始可用於這些情況。

查看參考手冊中的更多信息:http://docs.spring.io/spring-integration/reference/html/mqtt.html

+0

ok。有什麼方法可以捕獲和處理? – Anand03

+0

不適用。 'MqttPahoMessageDrivenChannelAdapter'中有這樣一個鉤子。不過,你可以通過''client.connect(connectionOptions)'在其他組件中通過相同的'MqttPahoClientFactory'手工克服它。 –

+0

感謝您的參與。當代理在啓動應用程序時不可用時,您建議的方法將起作用。但是,如果代理在應用程序運行時出現故障,則需要以其他方式處理 – Anand03

相關問題