com.netease.nim.camellia.delayqueue.sdk.api.DelayQueueServerDiscoveryFactory Maven / Gradle / Ivy
The newest version!
package com.netease.nim.camellia.delayqueue.sdk.api;
import com.netease.nim.camellia.core.discovery.CamelliaDiscovery;
import com.netease.nim.camellia.core.discovery.ReloadableDiscoveryFactory;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledExecutorService;
/**
* Created by caojiajun on 2022/10/9
*/
public class DelayQueueServerDiscoveryFactory extends ReloadableDiscoveryFactory {
private final ConcurrentHashMap map = new ConcurrentHashMap<>();
public DelayQueueServerDiscoveryFactory(NamedServerListGetter getter, int reloadIntervalSeconds, ScheduledExecutorService schedule) {
super(getter, reloadIntervalSeconds, schedule);
}
public DelayQueueServerDiscoveryFactory(NamedServerListGetter getter, int reloadIntervalSeconds) {
super(getter, reloadIntervalSeconds);
}
public DelayQueueServerDiscoveryFactory(NamedServerListGetter getter) {
super(getter, 5);
}
@Override
public DelayQueueServerDiscovery getDiscovery(String serviceName) {
DelayQueueServerDiscovery discovery = map.get(serviceName);
if (discovery == null) {
synchronized (map) {
discovery = map.get(serviceName);
if (discovery == null) {
discovery = init(serviceName);
map.put(serviceName, discovery);
}
}
}
return discovery;
}
private DelayQueueServerDiscovery init(String serviceName) {
CamelliaDiscovery discovery = super.getDiscovery(serviceName);
return new DelayQueueServerDiscovery() {
@Override
public List findAll() {
return discovery.findAll();
}
@Override
public void setCallback(Callback callback) {
discovery.setCallback(callback);
}
@Override
public void clearCallback(Callback callback) {
discovery.clearCallback(callback);
}
};
}
}