RollingSelector.java 1.0 KB
Newer Older
wu-sheng's avatar
wu-sheng 已提交
1
package com.a.eye.skywalking.collector.actor.selector;
2 3

import com.a.eye.skywalking.collector.actor.AbstractWorker;
4 5
import com.a.eye.skywalking.collector.actor.WorkerRef;

6 7 8 9
import java.util.List;

/**
 * The <code>RollingSelector</code> is a simple implementation of {@link WorkerSelector}.
10
 * It choose {@link WorkerRef} nearly random, by round-robin.
11 12 13
 *
 * @author wusheng
 */
P
pengys5 已提交
14
public enum RollingSelector implements WorkerSelector {
15 16 17 18 19 20 21 22
    INSTANCE;

    /**
     * A simple round variable.
     */
    private int index = 0;

    /**
23
     * Use round-robin to select {@link WorkerRef}.
24
     *
25
     * @param members given {@link WorkerRef} list, which size is greater than 0;
26
     * @param message the {@link AbstractWorker} is going to send.
27
     * @return the selected {@link WorkerRef}
28 29
     */
    @Override
30
    public WorkerRef select(List<WorkerRef> members, Object message) {
31 32 33 34 35 36
        int size = members.size();
        index++;
        int selectIndex = Math.abs(index) % size;
        return members.get(selectIndex);
    }
}