DUBBO-234 监控中心负责清理redis脏数据

git-svn-id: http://code.alibabatech.com/svn/dubbo/trunk@1242 1a56cb94-b969-4eaa-88fa-be21384802f2
This commit is contained in:
william.liangf 2012-03-10 18:59:58 +00:00
parent 9d2e60fdc6
commit 12c9791259
1 changed files with 27 additions and 11 deletions

View File

@ -75,6 +75,8 @@ public class RedisRegistry extends FailbackRegistry {
private final int reconnectPeriod;
private final int expirePeriod;
private volatile boolean admin = false;
public RedisRegistry(URL url) {
super(url);
@ -128,10 +130,34 @@ public class RedisRegistry extends FailbackRegistry {
for (String provider : new HashSet<String>(getRegistered())) {
jedis.hset(toProviderPath(URL.valueOf(provider)), provider, String.valueOf(System.currentTimeMillis() + expirePeriod));
}
if (admin) {
clean(jedis);
}
} finally {
jedisPool.returnResource(jedis);
}
}
// 监控中心负责删除过期脏数据
private void clean(Jedis jedis) {
Set<String> keys = jedis.keys(root + Constants.ANY_VALUE);
if (keys != null && keys.size() > 0) {
for (String key : keys) {
Map<String, String> values = jedis.hgetAll(key);
if (values != null && values.size() > 0) {
for (Map.Entry<String, String> entry : values.entrySet()) {
String url = entry.getKey();
jedis.hdel(key, url);
}
if (key.endsWith(Constants.CONSUMERS)) {
jedis.publish(key, Constants.UNSUBSCRIBE);
} else {
jedis.publish(key, Constants.UNREGISTER);
}
}
}
}
}
public boolean isAvailable() {
try {
@ -210,6 +236,7 @@ public class RedisRegistry extends FailbackRegistry {
Jedis jedis = jedisPool.getResource();
try {
if (service.endsWith(Constants.ANY_VALUE)) {
admin = true;
for (String s : getServices(jedis, service)) {
doNotify(jedis, s, url, listener);
}
@ -278,17 +305,6 @@ public class RedisRegistry extends FailbackRegistry {
if (UrlUtils.isMatch(url, u)) {
urls.add(u);
}
} else if (url.getParameter(Constants.ADMIN_KEY, false)) {
// 监控中心负责删除过期脏数据
if (Constants.SUBSCRIBE_PROTOCOL.equals(u.getProtocol())) {
String key = toConsumerPath(u);
jedis.hdel(key, u.toFullString());
jedis.publish(key, Constants.UNSUBSCRIBE);
} else {
String key = toProviderPath(u);
jedis.hdel(key, u.toFullString());
jedis.publish(key, Constants.UNREGISTER);
}
}
}
}