Hystrix: как запаковать несколько звонков - PullRequest
0 голосов
/ 18 октября 2018

Я использую Hystrix для улучшения своих услуг.Как я могу декапсулировать вызовы сервисов в Hystrix.Я знаю, что вы можете создать для каждого вызова специальный Hystrix-класс, но это было бы слишком много работы без использования Spring!

Я пытаюсь описать мою проблему с псевдокодом:

public class HystrixController extends HystrixCommand {


    public static void main(String[] args) throws Exception {
        HystrixController hystrixController = new HystrixController();
        System.out.print(hystrixController.execute());

    }

    private final ExampleService exampleService;

    protected HystrixController() throws Exception {
        super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"));
        this.exampleService = new ExampleService();
    }

    // Call 1
    public List getItemsAsList() {
        return exampleService.getItemsByContractId(contractID);
    }

    // Call 2
    public List getItemsByName() {
        return exampleService.getItemsByName(contractID);
    }

    // How can I isolate the two calls ? The run() only allows me to use one.
    @Override
    protected List run() throws Exception {
        return getItemsAsList();
    }

}

ВВ примере, который вы видите, можно выполнить только один вызов.Я хотел бы иметь что-то вроде этого:

public class HystrixController extends HystrixCommand {


    public static void main(String[] args) throws Exception {
        HystrixController hystrixController = new HystrixController();
        System.out.print(hystrixController.execute(1));
        System.out.print(hystrixController.execute(2));

    }

    private final ExampleService exampleService;

    protected HystrixController() throws Exception {
        super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"));
        this.exampleService = new ExampleService();
    }

    // Call 1
    public List getItemsAsList() {
        return exampleService.getItemsByContractId(contractID);
    }

    // Call 2
    public List getItemsByName() {
        return exampleService.getItemsByName(contractID);
    }

    // Multi Threads
    @Override
    protected List run_getItemsAsList() throws Exception {
        return getItemsAsList();
    }
    @Override
    protected List run_getItemsByName() throws Exception {
        return getItemsByName();
    }

}

Заранее спасибо, и я прошу прощения за мой сломанный английский

...