0

I would like to trigger a fallback from a @HystrixCommand Method based on my own criteria (checking for a specific response status).

My method basically acts as a client which calls a service in another URL (marked here as URL).

Here is my code:

@HystrixCommand(fallbackMethod="fallbackPerformOperation")
    public Future<Object> performOperation(String requestString) throws InterruptedException {

        return new AsyncResult<Object>() {

            @Override
            public Object invoke() {
                Client client = null;
                WebResource webResource  = null;
                ClientResponse response =null;
                String results = null; 
                try{
                    client = Client.create();       
                    webResource = client.resource(URL);
                    client.setConnectTimeout(10000);
                    client.setReadTimeout(10000);
                    response = webResource.type("application/xml")
                       .post(ClientResponse.class, requestString);  
                    logger.info("RESPONSE STATUS: " + response.getStatus());
                    if (response.getStatus() != 200) {
                          webResource = null;
                          logger.error(" request failed with the HTTP Status: " + response.getStatus());

                        throw new RuntimeException(" request failed with the HTTP Status: "
                             + response.getStatus());


                    }

                    results = response.getEntity(String.class);

              } finally {
                  client.destroy();
                  webResource = null;
              }
                return results;
            }

        };
}

This triggers the fallback Method fallbackPerformOperation() when the response status code is not 200 i.e. response.getStatus()!=200.

The fallback method returns a string which tells the user that the Request did not return a status of 200 and so it is falling back.

I want to know if I can trigger the fallback without having to explicitly throw an exception inside my performOperation() Method.

Could I use @HystrixProperty? I know people mostly use it for timeouts and volume thresholds but could I write a custom @HystrixProperty that checks if the response status is 200 or not within my Method?

Anshuman Tripathy
  • 113
  • 1
  • 3
  • 12

0 Answers0