Как я могу получить информацию о том, кто является основным узлом распределенной очереди, а кто резервным узлом?

Я добавляю некоторые данные в распределенную очередь, и мне интересно, как я могу получить некоторую информацию о том, кто является основным узлом очереди и кто является резервным узлом.

Спасибо, Билл


person biao li    schedule 09.09.2014    source источник


Ответы (2)


Очередь кэша GridGain является распределенной, т.е. разные элементы могут храниться на разных узлах. Если у вашего кеша есть резервные копии, то каждый элемент будет продублирован на двух или более узлах. Таким образом, невозможно определить основной или резервный узел для несовмещенной очереди.

Если очередь совмещена, все ее элементы будут храниться на одном узле (это можно использовать, если у вас много маленьких очередей вместо одной большой очереди). В этом случае вы можете получить первичный и резервный узел для этой очереди, передав имя очереди в affinity, например:

// Create collocated queue (3rd parameter is true).
GridCacheQueue<String> queue = cache.dataStructures().queue("MyQueue", 100, true, true);

// Get primary and backup nodes using cache affinity.    
Iterator<GridNode> nodes = cache.affinity().mapKeyToPrimaryAndBackups("MyQueue").iterator();

// First element in collection is always the primary node.
GridNode primary = nodes.next();

// Other nodes in collection are backup nodes.
GridNode backup1 = nodes.next();
GridNode backup2 = nodes.next();

Вы ничего не видите во время итерации по кэшу, поскольку элементы очереди являются внутренними записями, поэтому они доступны только через API GridCacheQueue, но не через API GridCache. Вот пример:

// Create or get a queue.
GridCacheQueue<String> queue = cache.dataStructures().queue("MyQueue", 100, false, true);

for (String item : queue)
    System.out.println(item);
person Valentin Kulichenko    schedule 10.09.2014

Пока я знаю, что распределенная очередь основана на кеше GridGain. Однако я запускаю следующий код и получаю пустой кеш.

        GridCache<Object, Object> cache = grid.cache("partitioned_tx");
        GridCacheDataStructures dataStruct = cache.dataStructures();
        GridCacheQueue<String> queue = dataStruct.queue("myQueueName", 0, false, true);

        for (int i = 0; i < 20; i++){
             queue.add("Value-"+i);
        }

        GridCacheAffinity<Object> affinity = cache.affinity();
        int part;
        Collection<GridNode> nodes;

        for(Object key:cache.keySet()){
            System.out.println("key="+key.toString());
            part = affinity.partition(key);
            nodes = affinity.mapPartitionToPrimaryAndBackups(part);

            for(GridNode node:nodes){
                System.out.println("key of "+key.toString()+" is primary: "+affinity.isPrimary(node, key));
                System.out.println("key of "+key.toString()+" is backup: "+affinity.isBackup(node, key));
            }
        }
person biao li    schedule 10.09.2014