package org.skywalking.apm.collector.actor;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.skywalking.apm.collector.actor.selector.WorkerSelector;
import java.util.List;
/**
* @author pengys5
*/
public class WorkerRefs<T extends WorkerRef> {
private Logger logger = LogManager.getFormatterLogger(WorkerRefs.class);
private List<T> workerRefs;
private WorkerSelector workerSelector;
protected WorkerRefs(List<T> workerRefs, WorkerSelector workerSelector) {
this.workerRefs = workerRefs;
this.workerSelector = workerSelector;
}
public void tell(Object message) throws Exception {
logger.debug("WorkerSelector instance of %s", workerSelector.getClass());
workerSelector.select(workerRefs, message).tell(message);
}
public void ask(Object request, Object response) throws Exception {
WorkerRef workerRef = workerSelector.select(workerRefs, request);
if (workerRef instanceof LocalSyncWorkerRef) {
((LocalSyncWorkerRef) workerRef).ask(request, response);
} else {
throw new IllegalAccessError("only local sync worker can ask");
}
}
}