Правило слюни не работает для реального сценария использования в больших масштабахJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Правило слюни не работает для реального сценария использования в больших масштабах

Сообщение Anonymous »

Ниже я написал правило для оценки очень простого варианта использования.

Код: Выделить всё

rule "WIN_DRL"
when
$featureMap: Map()
$reward: Reward()
$rewardSummery : RewardSummery(
$milestoneId: milestoneId,
additionalParam["eventSource"] == $reward.getEventSource(),
"SUPER_AMOUNT_MONTHLY_SUM" == aggregationsDrl
)
$container: WinningRuleResultContainer()
then
System.out.println( "in then condition");
WinningRuleResult result = new WinningRuleResult($milestoneId, "" );
$container.addResult(result);
end
Приведенное выше правило отлично работает при низком масштабе (2000 событий в минуту).
Правило не подходит для реальных случаев использования в большом масштабе (5000 событий в минуту).
Я кэшировал kieContainerSessionsPool в памяти своих модулей.

Во время выполнения: -
  • Получить новый KieSession из этих контейнеров
  • Вставить все объекты в контейнер
  • fireAllRules
Я добавляю свой Java-код, который использую для инициализации контейнеров.

Код: Выделить всё

@Singleton
@Log4j2
public class RuleEngineServiceImpl implements RuleEngineService {

Map kieContainersPoolMap = new ConcurrentHashMap();

public void executeRules(String shaKey, List objects){
KieContainerSessionsPool kieContainerPool = this.kieContainersPoolMap.get(shaKey);
long startTime = CommonUtil.getCurrentEpoch() ;
log.info("KieSession for shaKey: {}, startTime: {}", shaKey, startTime);
KieSession kSession = null;
Reward rewardObject = null ;
WinningRuleResultContainer winningRuleResultContainer = null ;

synchronized(RuleEngineServiceImpl.class) {
kSession = kieContainerPool.newKieSession();
long identifier = kSession.getIdentifier();
}

if(Objects.isNull(kSession)){
log.info("KieSession is null, shaKey: {}", shaKey);
}

// insert all the data object to drools.
for (Object ob : objects) {
kSession.insert(ob);
}
// Fire all rules
int fireRulesResult = 0;
int retryCount = 0;

while(fireRulesResult==0 && retryCount

Подробнее здесь: [url]https://stackoverflow.com/questions/79828471/drools-rule-fails-for-genuine-use-case-at-high-scale[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»