如何获取有关谁是分布式队列的主节点以及谁是备份节点的信息?

时间:2014-09-09 23:31:03

标签: gridgain

我将一些数据添加到分布式队列中,我想知道如何获得有关谁是队列主节点以及谁是备份节点的信息。

谢谢, 比尔

2 个答案:

答案 0 :(得分:2)

GridGain缓存队列是分布式的,即不同的元素可以存储在不同的节点上。如果缓存具有备份,则每个元素将在两个或多个节点上重复。因此,无法确定非并置队列的主节点或备份节点。

如果队列并置,则其所有项目将存储在一个节点上(如果您有许多小队列而不是一个大队列,则可以使用此项目)。在这种情况下,您可以获取此队列的主节点和备份节点,将队列名称传递给亲缘关系,如下所示:

// 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();

在迭代缓存期间没有看到任何内容,因为队列元素是内部条目,因此只能通过GridCacheQueue API访问它们,但不能通过GridCache API访问。这是一个例子:

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

for (String item : queue)
    System.out.println(item);

答案 1 :(得分:0)

到目前为止,我知道分布式队列基于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));
            }
        }