2013-08-07 215 views
1

我正在嘗試爲託管Web服務的服務器重新啓動時的時間爲Web服務客戶端實現故障切換。我試圖執行下面的代碼,它工作得很好,但是有兩個問題:CXF故障轉移問題

  1. 第一次「失敗」發生後,客戶端將切換到下一個備用地址,但不會實際完成的Web服務調用。
  2. 當主服務器恢復運行時,客戶端不會切換回使用該服務器。相反,它會繼續使用它當前使用的任何服務器。

下面的代碼:

<jaxws:client id="someService" 
     serviceClass="com.foo.bar.webservice.service.SomeService" 
     address="https://myserver.server.net/webservices/cxf/SomeService" 
     username="myuser" 
     password="mypassword"> 

    <jaxws:features> 
     <clustering:failover> 
      <clustering:strategy> 
       <bean class="org.apache.cxf.clustering.SequentialStrategy"> 
        <property name="alternateAddresses"> 
         <list> 
          <value>otherserver/webservices/cxf/SomeService</value> 
          <value>thirdserver/webservices/cxf/SomeService</value> 
         </list> 
        </property> 
       </bean> 
      </clustering:strategy> 
     </clustering:failover> 
    </jaxws:features> 
</jaxws:client> 

任何想法?

回答

1

我建議你使用像Apache httpd這樣的Web服務器來在應用服務器集羣的節點之間進行負載平衡。然後,羣集和故障轉移不是您的應用程序必須管理的。

+1

雖然我會同意通過負載均衡故障轉移可能是最清潔,最簡單的解決方案,也不會對我來說很有用。此服務調用由接收JMS消息觸發,即使所有潛在節點都不可用,我也不能丟棄消息。 –

1

你可能想嘗試另一種CXF故障切換功能它有你需要什麼(能力故障恢復) https://github.com/jaceko/cxf-circuit-switcher

+0

在紙上,這正是我所要求的。我已經實現了一個自定義/手動解決方案,但是我會看到在某些時候我可以回去嘗試一下。 –