Архитектура с Hystrix и десятками сервисов - PullRequest
0 голосов
/ 14 октября 2019

Я поддерживаю архитектуру, которая имеет возможность взаимодействовать как минимум с 80 внешними службами, и мы используем Hystrix для этих служб.

Эти службы имеют что-то общее: некоторые из них имеютодин и тот же бэкэнд в их сторонах - это означает, что способ связи с ними одинаков, поэтому у нас есть один класс драйверов, который общается с ними, единственное, что меняется, - это IP-адрес. Мы используем одну HystrixCommand в этом драйвере.

Моя проблема начинается здесь. Если один из этих сервисов с таким же бэкэндом станет нестабильным, Hystrix прервет все остальные сервисы, а не тот, который нам нужен.

Насколько я понимаю, мне действительно нужно создать HystrixCommand длякаждый из них.

Это на самом деле то, что мне нужно сделать? Нужно ли создавать 80 реализаций HystrixCommand? Любое предложение о том, как избежать необходимости создавать все эти 80 HystrixCommands?

1 Ответ

0 голосов
/ 15 октября 2019

Хорошо, так что мне удалось решить мою проблему.

Я допустил ошибку, не назвав HystrixCommand's.

Имя команды, по умолчанию, получено из имени класса:

getClass().getSimpleName();

Так что это была HystrixCommand для всех служб, которая привела к цепинарушите их все.

Назвав HystrixCommand'ы, я смогу достичь желаемого уровня изоляции с помощью службы, даже если один и тот же класс драйверов используется многими различными службами. Мне просто нужно назвать Команды, основываясь на имени внешней службы.

Чтобы явно определить имя, передайте его через конструктор HystrixCommand или HystrixObservableCommand:

public CommandHelloWorld(String name) {
    super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"))
            .andCommandKey(HystrixCommandKey.Factory.asKey("HelloWorld")));
    this.name = name;
}

Источник: https://github.com/Netflix/Hystrix/wiki/How-To-Use#command-name

...