Слюни: Как настроить многопоточность (multithreadEvaluation) 7.34.0 - Java Maven Spring - PullRequest
0 голосов
/ 16 апреля 2020

Я вижу, что multithreadEvaluation по умолчанию имеет значение false. У меня есть простая реализация Maven Spring Drools с использованием таблиц решений электронных таблиц.

В этом нет ничего особенного, поскольку это в основном стандартная установка. У меня есть спокойный API, и при использовании jmeter для POST в нашей конечной точке, объект заполняется, а затем мы запускаем все правила для него. При использовании нескольких потоков в jmeter я ясно вижу, что многопоточность не работает.

Из документации:

Вы можете включить многопоточную оценку, используя один из следующих параметров: Включить свойство многопоточной системы оценки: drools.multithreadEvaluation=true

Включить многопоточную оценку при программном создании базы K IE:

KieServices ks = KieServices.Factory.get();
KieBaseConfiguration kieBaseConf = ks.newKieBaseConfiguration();
kieBaseConf.setOption(MultithreadEvaluationOption.YES);
KieBase kieBase = kieContainer.newKieBase(kieBaseConf);

Попытка добавления drools.multithreadedEvaluation=true в application.properties. Не удалось решить проблему.

Пробовал второй метод в kieSession() @Bean, но kieBase не используется и не решил проблему. В настоящее время не уверены, достаточно ли просто создания экземпляра KieBase. Где это go? Метод возвращает kContainer.newKieSession (), поэтому не уверен, как определить, действительно ли kieBaseConf.setOption (MultithreadEvaluationOption.YES) действительно что-то сделал.

Попытался создать новый kieSession до fireAllRules. Этот сервис @Autowired к kieSession @ Bean.

Первый раз, когда вы работаете буквально со всем этим стеком, так что спасибо, что взяли его медленно.

TL; DR Нужны пошаговые инструкции, как установите для drools.multithreadEvaluation значение true.

1 Ответ

1 голос
/ 16 апреля 2020

Согласно документации, Drools ожидает, что свойство System будет установлено, в то время как вы устанавливаете его в application.properties, что, я полагаю, связано с Spring? Попробуйте установить его одним из следующих способов:

  1. При запуске приложения добавьте «-Ddrools.multithreadEvaluation» в командную строку, например:

    java -Ddrools.multithreadEvaluation <the rest of parameters>

  2. Или установите его программно при запуске приложения на ранней стадии инициализации до вызова любых классов Drools:

    System.setProperty("drools.multithreadEvaluation", "true");

...