Есть ли в очереди на зажигание какой-либо метод, чтобы проверить, создана ли очередь, или нет, как кеш - PullRequest
0 голосов
/ 27 апреля 2018

Есть ли в очереди воспламенения какой-либо метод, чтобы проверить, создана ли очередь, или нет, как кеш?

Для кеша зажигания я мог бы использовать что-то вроде:

        if( txInfoCache.get(txType) == null ) {
            txInfoCache.put(txType, new TreeMap<Long, InfoRecord>());
        }

Но когда я пытаюсь использовать это для работы с очередью, он просто создает новую

        CollectionConfiguration colCfg = new CollectionConfiguration();

        IgniteQueue<InfoRecord>  queue =
                ignite.queue("ResultRecordQueue_" + txType, 0, null);

        // never go into this judge
        if (queue == null) {
            queue = ignite.queue("ResultRecordQueue_" + txType, 0, colCfg);
        }

1 Ответ

0 голосов
/ 27 апреля 2018

Я не совсем понимаю ваш код. Прежде всего, следующий фрагмент кода определяет, содержит ли кэш txInfoCache запись для данного ключа txType, и если он не содержит записи, связанной с ключом, он связывает указанный ключ с заданным значением.

if(txInfoCache.get(txType) == null) {
    txInfoCache.put(txType, new TreeMap<Long, InfoRecord>());
}

Его можно изменить на txInfoCache.putIfAbsent(txType, new TreeMap<Long, InfoRecord>()).

Что касается второй части вашего вопроса, я только что проверил Apache Ignite 2.4, и он работает хорошо. Метод Ignite.queue(String name, int cap, @Nullable CollectionConfiguration cfg) возвращает null, если именованная очередь не существует и CollectionConfiguration равно null. Убедитесь, что эта очередь не была создана ранее.

...