Может ли FeignClient использовать запасной вариант по умолчанию? - PullRequest
0 голосов
/ 04 октября 2019

Я хочу использовать запасной вариант по умолчанию, чтобы повторить попытку другого сервера. Но Feign & Hystrix поддерживают резервные и резервные фабрики для реализации резервной логики каждого метода. В резервной логике я хочу просто заменить хост (или порт) URL-адреса запроса на другой сервер. Могу ли я настроить резервную стратегию по умолчанию для достижения вышеуказанной цели?

Это мой клиент.

@FeignClient(value = "stores", url = "localhost:9000" ,fallbackFactory = FallbackFactoryImp.class)
public interface StoreClient {

    @RequestMapping(method = RequestMethod.GET, value = "/stores")
    List<Long> getStores();

    @RequestMapping(method = RequestMethod.GET, value = "/storesOthers")
    List<Long> getStoresOther();
}

И это моя резервная фабрика.

@Component
public class FallbackFactoryImp implements FallbackFactory<StoreClient> {

    @Override
    public StoreClient create(Throwable throwable) {
        return new StoreClient() {
            @Override
            public List<Long> getStores() {
                return (List<Long>) new HystrixCommand<Object>(null, null) {
                    @Override
                    protected Object run() throws Exception {
                        // retry to other server ex) GET localhost:8080/stores
                        return null;
                    }

                    @Override
                    protected Object getFallback() {
                        // return static data;
                        return null;
                    }
                }.execute();
            }

            @Override
            public List<Long> getStoresOther() {
                // duplicate logic
                return (List<Long>) new HystrixCommand<Object>(null, null) {
                    @Override
                    protected Object run() throws Exception {
                        // retry to other server ex) GET localhost:8080/storeOthers
                        return null;
                    }

                    @Override
                    protected Object getFallback() {
                        // return static data;
                        return null;
                    }
                }.execute();
            }
        };
    }
}
...