Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The recent addition to CXF failover features is the implementation based on circuit breakers, more precisely Apache Zest (https://zest.apache.org/) library. The configuration is very similar to the regular failover strategy, the only difference is usage of clustering:circuit-breaker-failover element.

Spring

Code Block
xml
xml
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jaxrs="http://cxf.apache.org/jaxrs"
       xmlns:clustering="http://cxf.apache.org/clustering"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
    
    <util:list id="addressList">
        <value>http://localhost:${testutil.ports.Server.1}/rest</value>
        <value>http://localhost:${testutil.ports.Server.2}/rest</value>
        <value>http://localhost:${testutil.ports.Server.3}/rest</value>
    </util:list>

    <bean id="SequentialAddresses" class="org.apache.cxf.clustering.SequentialStrategy">
        <property name="alternateAddresses">
            <ref bean="addressList"/>
        </property>
    </bean>

    <bean id="RandomAddresses" class="org.apache.cxf.clustering.RandomStrategy">
        <property name="alternateAddresses">
            <ref bean="addressList"/>
        </property>
    </bean>

    <jaxrs:client id="failoverSequential" address="http://localhost:8080/initialAddress">
       <jaxrs:features>
           <clustering:circuit-breaker-failover threshold="1" timeout="60000">
                <clustering:strategy>
                    <ref bean="SequentialAddresses"/>
                </clustering:strategy>
            </clustering:circuit-breaker-failover>
       </jaxrs:features>
    </jaxrs:client>

    <jaxrs:client id="failoverRandom" address="http://localhost:8080/initialAddress">
       <jaxrs:features>
           <clustering:circuit-breaker-failover threshold="1" timeout="60000">
                <clustering:strategy>
                    <ref bean="RandomAddresses"/>
                </clustering:strategy>
            </clustering:circuit-breaker-failover>
       </jaxrs:features>
    </jaxrs:client>

    <bean id="myWebClient" class="org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean" 
factory-method="createWebClient"> 
        <property name="address" value="http://some.base.url.that.responds/" /> 
        <property name="features">
            <ref bean="failover1"/> 
        </property>  
    </bean> 
</beans>

...