RollingSelector.java 1010 字节
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
P
pengys5 已提交
13
 * @since feature3.0
14
 */
15
public class RollingSelector implements WorkerSelector<WorkerRef> {
16 17 18

    private int index = 0;

P
pengys5 已提交
19 20 21 22 23 24 25
    /**
     * 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}
     */
26
    @Override
27
    public WorkerRef select(List<WorkerRef> members, Object message) {
28 29 30 31 32 33
        int size = members.size();
        index++;
        int selectIndex = Math.abs(index) % size;
        return members.get(selectIndex);
    }
}