Я добавляю некоторые данные в распределенную очередь, и мне интересно, как я могу получить некоторую информацию о том, кто является основным узлом очереди и кто является резервным узлом.
Спасибо, Билл
Я добавляю некоторые данные в распределенную очередь, и мне интересно, как я могу получить некоторую информацию о том, кто является основным узлом очереди и кто является резервным узлом.
Спасибо, Билл
Очередь кэша 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);
Пока я знаю, что распределенная очередь основана на кеше 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));
}
}