调整目录结构,完成备份Redis的功能
This commit is contained in:
parent
1231e06ce6
commit
7014fcd652
|
|
@ -1,69 +0,0 @@
|
|||
package com.ai.cloud.skywalking.reciever.alarm.redis;
|
||||
|
||||
import com.ai.cloud.skywalking.reciever.conf.Config;
|
||||
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import redis.clients.jedis.Jedis;
|
||||
import redis.clients.jedis.JedisPool;
|
||||
|
||||
public class RedisInitializer {
|
||||
|
||||
private static Logger logger = LogManager.getLogger(RedisInitializer.class);
|
||||
private static JedisPool jedisPool;
|
||||
private static final int REDIS_MAX_IDLE = 10;
|
||||
private static final int REDIS_MIN_IDLE = 1;
|
||||
private static final int REDIS_MAX_TOTAL = 20;
|
||||
|
||||
static {
|
||||
GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
|
||||
genericObjectPoolConfig.setTestOnBorrow(true);
|
||||
genericObjectPoolConfig.setMaxIdle(REDIS_MAX_IDLE);
|
||||
genericObjectPoolConfig.setMinIdle(REDIS_MIN_IDLE);
|
||||
genericObjectPoolConfig.setMaxTotal(REDIS_MAX_TOTAL);
|
||||
|
||||
String redisServerConfig = Config.Alarm.REDIS_SERVER_CONFIG;
|
||||
if (redisServerConfig == null || redisServerConfig.length() <= 0) {
|
||||
logger.error("Redis server config is null.");
|
||||
}
|
||||
|
||||
String[] config = redisServerConfig.split(":");
|
||||
if (config.length != 2) {
|
||||
logger.error("Redis server config is illegal");
|
||||
}
|
||||
|
||||
jedisPool =
|
||||
new JedisPool(genericObjectPoolConfig, config[0], Integer.valueOf(config[1]));
|
||||
|
||||
// Test connect redis.
|
||||
RedisInitializer.redis(new Executor<String>() {
|
||||
@Override
|
||||
public String exec(Jedis jedis) {
|
||||
return jedis.get("ok");
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public static <T> T redis(Executor<T> executor) {
|
||||
Jedis jedis = null;
|
||||
try {
|
||||
jedis = jedisPool.getResource();
|
||||
return executor.exec(jedis);
|
||||
} catch (Exception e) {
|
||||
logger.error("Failed to connect redis", e);
|
||||
//TODO 启动备用Redis
|
||||
} finally {
|
||||
if (jedis != null) {
|
||||
jedis.close();
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public interface Executor<R> {
|
||||
R exec(Jedis jedis);
|
||||
}
|
||||
}
|
||||
|
|
@ -89,5 +89,13 @@ public class Config {
|
|||
public static int ALARM_EXPIRE_SECONDS = 1000 * 60 * 90;
|
||||
|
||||
public static String REDIS_SERVER_CONFIG = "127.0.0.1:6379";
|
||||
|
||||
public static String BAK_REDIS_SERVER_CONFIG = "127.0.0.1:6379";
|
||||
|
||||
public static int REDIS_MAX_IDLE = 10;
|
||||
|
||||
public static int REDIS_MIN_IDLE = 1;
|
||||
|
||||
public static int REDIS_MAX_TOTAL = 20;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
package com.ai.cloud.skywalking.reciever.alarm;
|
||||
package com.ai.cloud.skywalking.reciever.storage.chain.alarm;
|
||||
|
||||
import com.ai.cloud.skywalking.reciever.alarm.redis.RedisInitializer;
|
||||
import com.ai.cloud.skywalking.reciever.storage.chain.alarm.redis.RedisInitializer;
|
||||
import redis.clients.jedis.Jedis;
|
||||
|
||||
import java.util.Collection;
|
||||
|
|
@ -0,0 +1,110 @@
|
|||
package com.ai.cloud.skywalking.reciever.storage.chain.alarm.redis;
|
||||
|
||||
import com.ai.cloud.skywalking.reciever.conf.Config;
|
||||
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import redis.clients.jedis.Jedis;
|
||||
import redis.clients.jedis.JedisPool;
|
||||
|
||||
public class RedisInitializer {
|
||||
|
||||
private static Logger logger = LogManager.getLogger(RedisInitializer.class);
|
||||
private static JedisPool jedisPool;
|
||||
private static Object lock = new Object();
|
||||
|
||||
static {
|
||||
GenericObjectPoolConfig genericObjectPoolConfig = buildGenericObjectPoolConfig();
|
||||
String redisServerConfig = Config.Alarm.REDIS_SERVER_CONFIG;
|
||||
if (redisServerConfig == null || redisServerConfig.length() <= 0) {
|
||||
logger.error("Redis server config is null.");
|
||||
}
|
||||
|
||||
String[] config = redisServerConfig.split(":");
|
||||
if (config.length != 2) {
|
||||
logger.error("Redis server config is illegal");
|
||||
}
|
||||
|
||||
jedisPool =
|
||||
new JedisPool(genericObjectPoolConfig, config[0], Integer.valueOf(config[1]));
|
||||
|
||||
// Test connect redis.
|
||||
RedisInitializer.redis(new Executor<String>() {
|
||||
@Override
|
||||
public String exec(Jedis jedis) {
|
||||
return jedis.get("ok");
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public static <T> T redis(Executor<T> executor) {
|
||||
Jedis jedis = null;
|
||||
try {
|
||||
jedis = jedisPool.getResource();
|
||||
jedis.connect();
|
||||
return executor.exec(jedis);
|
||||
} catch (Exception e) {
|
||||
jedisPool = null;
|
||||
logger.error("Failed to connect redis", e);
|
||||
// 启动备用Redis
|
||||
if (jedisPool == null) {
|
||||
synchronized (lock) {
|
||||
if (jedisPool == null) {
|
||||
// 生成备份Redis的Redis Client Pool
|
||||
GenericObjectPoolConfig genericObjectPoolConfig = buildGenericObjectPoolConfig();
|
||||
String bakRedisServerConfig = Config.Alarm.BAK_REDIS_SERVER_CONFIG;
|
||||
if (bakRedisServerConfig == null || bakRedisServerConfig.length() <= 0) {
|
||||
logger.error("Bak Redis server config is null.");
|
||||
}
|
||||
|
||||
String[] config = bakRedisServerConfig.split(":");
|
||||
if (config.length != 2) {
|
||||
logger.error("Bak Redis server config is illegal");
|
||||
}
|
||||
|
||||
jedisPool =
|
||||
new JedisPool(genericObjectPoolConfig, config[0], Integer.valueOf(config[1]));
|
||||
try {
|
||||
jedis = jedisPool.getResource();
|
||||
jedis.connect();
|
||||
jedis.get("ok");
|
||||
} catch (Exception ex) {
|
||||
logger.error("Failed to connect bak redis server.", ex);
|
||||
// 备份Redis的都失败了,没有想好怎么提示
|
||||
//System.exit(-1);
|
||||
} finally {
|
||||
if (jedis != null) {
|
||||
jedis.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 重新再获取Redis Client返回执行
|
||||
jedis = jedisPool.getResource();
|
||||
jedis.connect();
|
||||
return executor.exec(jedis);
|
||||
}
|
||||
} finally {
|
||||
if (jedis != null) {
|
||||
jedis.close();
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static GenericObjectPoolConfig buildGenericObjectPoolConfig() {
|
||||
GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
|
||||
genericObjectPoolConfig.setTestOnBorrow(true);
|
||||
genericObjectPoolConfig.setMaxIdle(Config.Alarm.REDIS_MAX_IDLE);
|
||||
genericObjectPoolConfig.setMinIdle(Config.Alarm.REDIS_MIN_IDLE);
|
||||
genericObjectPoolConfig.setMaxTotal(Config.Alarm.REDIS_MAX_TOTAL);
|
||||
return genericObjectPoolConfig;
|
||||
}
|
||||
|
||||
|
||||
public interface Executor<R> {
|
||||
R exec(Jedis jedis);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.ai.cloud.skywalking.reciever.alarm;
|
||||
package com.ai.cloud.skywalking.reciever.storage.chain.alarm;
|
||||
|
||||
import com.ai.cloud.skywalking.reciever.conf.Config;
|
||||
import com.ai.cloud.skywalking.reciever.conf.ConfigInitializer;
|
||||
Loading…
Reference in New Issue