J'ai le client HystrixFeign et j'essaie d'obtenir la cause/exception dans mon implémentation de secours, parce que j'aimerais vraiment connaître la raison de la solution de repli pour résoudre le problème. l'appel de service a échoué. Mais les implémentations ci-dessous ne me causent pas la cause. Cela fonctionne très bien et le repli est appelé tout le temps. Mais je n'ai aucune idée pourquoi. Je suis nouveau à Feign et Hystrix. Mon application est écrite en Java il y a 1,6 ans et c'est une sorte d'appel d'amélioration. Donc, je ne peux pas aller pour toutes les expressions lambda.Problème lors de la récupération du client HystrixFeign
J'ai l'interface client défini comme ci-dessous
public interface MyServiceFeignClient {
@RequestLine("POST /myService/order")
@Headers("Content-Type:application/vnd.org.company.domain.order+json;version=1.0")
ServiceResponse sendOrder(String content);
}
Mon FeignClientFacory est comme ci-dessous
public class FeignClientFactory {
private static final Logger LOG = LoggerFactory.getLogger(FeignClientFactory.class);
private String serviceUrl;
public FeignClientFactory(final String serviceUrl) {
this.serviceUrl = serviceUrl;
}
public MyServiceFeignClient newInstance() {
return HystrixFeign.builder()
.decoder(new GsonDecoder())
.target(MyServiceFeignClient.class, serviceUrl);
}
class ClientFallbackFactory implements MyServiceFeignClient, FallbackFactory<ClientFallbackFactory> {
final Throwable cause;
public ClientFallbackFactory() {
this(null);
}
ClientFallbackFactory(Throwable cause) {
this.cause = cause;
}
// note that this method is not getting called at all
@Override
public ClientFallbackFactory create(Throwable cause) {
if (cause != null) {
String errMessage = StringUtils.isNotBlank(cause.getMessage()) ? cause.getMessage() : "unknown error occured";
LOG.debug("Client fallback called for the cause : {}", errMessage);
}
return new ClientFallbackFactory(cause);
}
// everytime this method is called as fallback and the cause is just null
@Override
public ServiceResponse sendOrder(String content) {
LOG.debug("service client api fallback called");
ServiceResponse response = new ServiceResponse();
String errMessage = (cause == null ? "service client api fallback called" : cause.getMessage());
response.setErrorMessage(errMessage);
response.setResultStatus("WARN");
return response;
}
}
}