in dubbo-registry-extensions/dubbo-registry-redis/src/main/java/org/apache/dubbo/registry/redis/RedisRegistry.java [463:506]
public void run() {
while (running) {
try {
if (!isSkip()) {
try {
if (!redisClient.isConnected()) {
continue;
}
try {
if (service.endsWith(ANY_VALUE)) {
if (first) {
first = false;
Set<String> keys = redisClient.scan(service);
if (CollectionUtils.isNotEmpty(keys)) {
for (String s : keys) {
doNotify(s);
}
}
resetSkip();
}
redisClient.psubscribe(new NotifySub(), service);
} else {
if (first) {
first = false;
doNotify(service);
resetSkip();
}
redisClient.psubscribe(new NotifySub(), service + PATH_SEPARATOR + ANY_VALUE); // blocking
}
} catch (Throwable t) { // Retry another server
logger.warn("Failed to subscribe service from redis registry. registry: " + getUrl().getAddress() + ", cause: " + t.getMessage(), t);
// If you only have a single redis, you need to take a rest to avoid overtaking a lot of CPU resources
sleep(reconnectPeriod);
}
} catch (Throwable t) {
logger.error(t.getMessage(), t);
sleep(reconnectPeriod);
}
}
} catch (Throwable t) {
logger.error(t.getMessage(), t);
}
}
}