All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.wicp.tams.common.redis.cachecloud.CacheCloudAssit Maven / Gradle / Ivy

/*
 * **********************************************************************
 * Copyright (c) 2022 .
 * All rights reserved.
 * 项目名称:common
 * 项目描述:公共的工具集
 * 版权说明:本软件属andy.zhou([email protected])所有。
 * ***********************************************************************
 */
package net.wicp.tams.common.redis.cachecloud;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;

import com.alibaba.fastjson.JSONObject;

import lombok.extern.slf4j.Slf4j;
import net.wicp.tams.common.Conf;
import net.wicp.tams.common.apiext.StringUtil;
import net.wicp.tams.common.http.HttpClient;
import net.wicp.tams.common.http.HttpResult;
import net.wicp.tams.common.redis.RedisAssit;
import net.wicp.tams.common.redis.pool.AbsPool;
import net.wicp.tams.common.redis.pool.JedisPoolTams;
import net.wicp.tams.common.redis.pool.JedisSentinelPoolTams;
import redis.clients.jedis.Jedis;

@Slf4j
public abstract class CacheCloudAssit {
	public static AbsPool standalone(long appId, GenericObjectPoolConfig poolConfig) {
		while (true) {
			String url = String.format(Conf.get("common.redis.cachecloud.domain_url")
					+ Conf.get("common.redis.cachecloud.redis_standalone_suffix")
					+ Conf.get("common.redis.cachecloud.client_version"), appId);
			HttpResult result = HttpClient.doGet(url);
			if (result == null || StringUtil.isNull(result.getBodyStr())) {
				log.warn("this http return error,url:[{}]", url);
				continue;
			}
			JSONObject parseObject = JSONObject.parseObject(result.getBodyStr());
			String instance = parseObject.getString("standalone");
			String[] instanceArr = instance.split(":");
			if (instanceArr.length != 2) {
				log.warn("instance info is invalid, instance: {}, appId: {}, continue...", instance, appId);
				continue;
			}
			JedisPoolTams standalone = RedisAssit.standalone("default", instanceArr[0],
					Integer.parseInt(instanceArr[1]), poolConfig);
			return standalone;
		}
	}

	public static AbsPool standalone(long appId) {
		return standalone(appId, null);
	}

	public static AbsPool sentinel(long appId, GenericObjectPoolConfig poolConfig) {
		while (true) {
			/**
			 * http请求返回的结果是空的;
			 */
			String url = String.format(Conf.get("common.redis.cachecloud.domain_url")
					+ Conf.get("common.redis.cachecloud.redis_sentinel_suffix")
					+ Conf.get("common.redis.cachecloud.client_version"), appId);
			HttpResult result = HttpClient.doGet(url);
			if (result == null || StringUtil.isNull(result.getBodyStr())) {
				log.warn("this http return error,url:[{}]", url);
				continue;
			}
			JSONObject parseObject = JSONObject.parseObject(result.getBodyStr());
			if (parseObject == null || parseObject.size() == 0) {
				log.error("get sentinel info for appId: {} error. continue...", appId);
				continue;
			}

			/** 检查客户端版本 **/
			int status = parseObject.getIntValue("status");
			if (status == ClientStatusEnum.ERROR.getStatus()) {
				throw new IllegalStateException(parseObject.getString("message"));
			} else if (status == ClientStatusEnum.WARN.getStatus()) {
				log.warn(parseObject.getString("message"));
			} else {
				log.info(parseObject.getString("message"));
			}

			/**
			 * 有效的请求:取出masterName和sentinels,并创建JedisSentinelPool的实例;
			 */
			String masterName = parseObject.getString("masterName");
			String sentinels = parseObject.getString("sentinels");

			JedisSentinelPoolTams sentinel = RedisAssit.sentinel("default", masterName, sentinels.split(" "),
					poolConfig);
			return sentinel;
		}
	}

	public static AbsPool sentinel(long appId) {
		return sentinel(appId, null);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy