2013-12-15 31 views
0

我們有被連接到一個服務器進程Swing GUI的客戶。如何檢測JMS主題連接的損失

客戶端「呼叫」使用jms:queue「從」駱駝路線定義端點,並使用ActiveMQ的作爲底層JMS代理服務器上的服務。

但是,客戶端還提供了一個駱駝jms:topic端點服務器廣播消息返回給客戶端。

不幸的是,它看起來像主題連接是越來越莫名其妙丟失,雖然客戶仍可以「呼叫」服務的服務器上,該服務器無法發送任何消息到客戶端的話題端點。

駱駝端點的客戶端春天的定義如下:

<camel:route> 
     <camel:from uri="jms:topic:inUseQueue"/> 
     <camel:to uri="bean:inUseInterfaceImpl"/> 
    </camel:route> 

而服務器端的生產商的定義如下:

<bean id="inUseManagerImpl" class="org.apache.camel.spring.remoting.CamelProxyFactoryBean"> 
    <property name="serviceUrl" value="jms:topic:inUseQueue"/> 
    <property name="serviceInterface" value="uniworks.core.inuse.InUseInterface"/> 
</bean> 

有誰知道的一種方式,我們可以以某種方式檢測客戶端的這個主題連接的丟失?

+0

自從我問這個問題以來,這個問題並沒有重現,所以我認爲這只是我們在某種程度上修正的一些暫時問題。 – DuncanKinnear

回答

0

一個簡單的解決辦法應覆蓋的CamelProxyFactoryBeanisSingleton()方法。返回false並讓spring在每次調用時創建生產者bean,而不是緩存它。或者您也可以將CamelProxyFactoryBean的範圍定義爲原型。

您也可以使用支持連接池ActiveMQ駱駝組件嘗試。

0

我意識到這是A 8個月大的問題,但嘿什麼是地獄。

讓服務器每分鐘播一次「isalive」消息是有意義的,這樣,如果客戶端沒有得到任何「isalive」消息,它可以認爲它已經斷開連接。

+0

是的,這是可以做到的。然而,我們設計了這個系統,以便在客戶端仍然「登錄」時關閉服務器並重新啓動服務器,因此當服務器「重啓」(幾分鐘)時,客戶端會認爲它是JMS'管道'已經丟失。自從我問這個問題以來,原來的問題並沒有重現,所以我認爲這是一個短暫的問題。 – DuncanKinnear