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

P
pengys5 已提交
3
import com.a.eye.skywalking.collector.actor.AbstractWorker;
4 5
import com.a.eye.skywalking.collector.actor.WorkerRef;

6 7 8
import java.util.List;

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

    private int index = 0;

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