Выполнение процессора распределенной карты Hazelcast на одном узле - PullRequest
0 голосов
/ 02 октября 2018

Я использую Hazelcast в приложении Spring Boot MVC, которое поддерживает высокую доступность, оно имеет 4 экземпляра той же логики, которые работают как активные-активные.Все 4 используют одну распределенную карту объектов.

В результате действий пользователя (доступ к определенному контроллеру) я запускаю EntryProcessor (map.submitToKey) на общей карте.Я думал, что такое действие будет запускать процессор только один раз, на одном узле, но вместо этого все 4 узла запускают один и тот же процессор одновременно.

Есть ли возможность выполнить EntryProcessor распределенной карты наодин узел?

1 Ответ

0 голосов
/ 02 октября 2018

Если вашей карте не нужны никакие резервные копии, тогда EntryProcessor может безопасно вернуть null из getBackupProcessor () .Когда возвращается null, резервные узлы не будут выполнять никаких EntryBackupProcessor.

В противном случае, если вы настроили резервные копии для карты, но вернули null для EntryBackupProcessor , запись не будет реплицированак резервным узлам.Это будет обрабатываться так, как будто нет резервных копий, настроенных для карты.Первичные и резервные копии со временем станут несовместимыми.Когда происходит сбой первичного сервера, вы теряете обновления, сделанные EntryProcessor.

. В этом случае, если вам нужны резервные копии, вы можете написать пользовательский EntryBackupProcessor, который может просто скопировать результат первичного EntryProcessor 'вместо выполнения логики EntryProcessor.Например:

class CustomEntryBackupProcessor implements EntryBackupProcessor {

    private Object resultOfEntryProcessor;

    @Override
    public void processBackup(Map.Entry entry) {
        entry.setValue(resultOfEntryProcessor);            
    }
}
...