2013-08-07 71 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

在纸上,这正是我所要求的。我已经实现了一个自定义/手动解决方案,但是我会看到在某些时候我可以回去尝试一下。 –