DUBBO-234 监控中心负责清理redis脏数据
git-svn-id: http://code.alibabatech.com/svn/dubbo/trunk@1242 1a56cb94-b969-4eaa-88fa-be21384802f2
This commit is contained in:
parent
9d2e60fdc6
commit
12c9791259
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue