Hystrix Javanica Collaser не работает - PullRequest
0 голосов
/ 03 июля 2018

Я использую Hystrix Javanica Collaser при весенней загрузке, но я обнаружил, что она не работает, мой код выглядит следующим образом:

класс обслуживания:

public class TestService {

    @HystrixCollapser(batchMethod = "getStrList")
    public Future<String> getStr(String id) {
         System.out.println("single");
         return null;
     }

     @HystrixCommand
     public List<String> getStrList(List<String> ids) {
         System.out.println("batch,size=" + ids.size());

         List<String> strList = Lists.newArrayList();
         ids.forEach(id -> strList.add("test"));
         return strList;
     }
 }

где я использую:

    public static void main(String[] args) {
          TestService testService = new TestService();

          HystrixRequestContext context = HystrixRequestContext.initializeContext();

          Future<String> f1= testService.getStr("111");
          Future<String> f2= testService.getStr("222");

          try {
              Thread.sleep(3000);
              System.out.println(f1.get()); // nothing printed
              System.out.println(f2.get()); // nothing printed
          } catch (Exception e) {
          }

          context.shutdown();
      }

На нем напечатано 3 single вместо 1 batch.

Я хочу знать, что не так с моим кодом, правильный пример лучше.

1 Ответ

0 голосов
/ 12 июля 2018

Я не могу найти образец hystrix javanica в Интернете, поэтому мне нужно прочитать исходный код, чтобы решить эту проблему, теперь она решена, и вот мое резюме:

при использовании сворачивателя hystrix (javanica) в подпружиненной загрузке необходимо:

  1. Определен hystrixAspect фасоль и импорт hystrix-strategy.xml;
  2. Аннотировать одиночный метод с помощью @Hystrix Collapser Аннотировать пакетный метод с помощью @HystrixCommand;
  3. Сделайте так, чтобы ваш метод нуждался в 1 параметре (ArgType) return Future, пакетном методе нужно List return List и убедитесь, что размер аргументов равен размеру возвращаемого значения.
  4. Установить свойства Hystrix batchMethod, scope, если вы хотите свернуть запросы от нескольких пользовательских потоков, вы должны установить область видимости на GLOBAL;
  5. Прежде чем отправлять один запрос, вы должны инициировать контекст hystrix с HystrixRequestContext.initializeContext() и shutdown контекстом, когда ваш запрос завершится;
...