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

com.nepxion.discovery.plugin.configcenter.extension.redis.adapter.RedisConfigAdapter Maven / Gradle / Ivy

There is a newer version: 4.3.20
Show newest version
package com.nepxion.discovery.plugin.configcenter.extension.redis.adapter;

/**
 * 

Title: Nepxion Discovery

*

Description: Nepxion Discovery

*

Copyright: Copyright (c) 2017-2050

*

Company: Nepxion

* @author Haojun Ren * @version 1.0 */ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import com.nepxion.discovery.common.entity.RuleEntity; import com.nepxion.discovery.common.redis.operation.RedisOperation; import com.nepxion.discovery.common.redis.operation.RedisSubscribeCallback; import com.nepxion.discovery.plugin.configcenter.adapter.ConfigAdapter; import com.nepxion.discovery.plugin.framework.adapter.PluginAdapter; import com.nepxion.discovery.plugin.framework.context.PluginContextAware; import com.nepxion.discovery.plugin.framework.event.RuleClearedEvent; import com.nepxion.discovery.plugin.framework.event.RuleUpdatedEvent; public class RedisConfigAdapter extends ConfigAdapter { private static final Logger LOG = LoggerFactory.getLogger(RedisConfigAdapter.class); @Autowired protected PluginContextAware pluginContextAware; @Autowired private PluginAdapter pluginAdapter; @Autowired private RedisOperation redisOperation; @Override public String getConfig() throws Exception { String config = getConfig(false); if (StringUtils.isNotEmpty(config)) { return config; } else { LOG.info("No partial config is retrieved from Redis server"); } config = getConfig(true); if (StringUtils.isNotEmpty(config)) { return config; } else { LOG.info("No global config is retrieved from Redis server"); } return null; } private String getConfig(boolean globalConfig) throws Exception { String groupKey = pluginContextAware.getGroupKey(); String group = pluginAdapter.getGroup(); String serviceId = pluginAdapter.getServiceId(); LOG.info("Get {} config from Redis server, {}={}, serviceId={}", getConfigType(globalConfig), groupKey, group, serviceId); return redisOperation.getConfig(group, globalConfig ? group : serviceId); } public void subscribePartialConfig(String config) { subscribeConfig(config, false); } public void subscribeGlobalConfig(String config) { subscribeConfig(config, true); } private void subscribeConfig(String config, boolean globalConfig) { String groupKey = pluginContextAware.getGroupKey(); String group = pluginAdapter.getGroup(); String serviceId = pluginAdapter.getServiceId(); try { redisOperation.subscribeConfig(config, new RedisSubscribeCallback() { @Override public void callback(String config) { if (StringUtils.isNotEmpty(config)) { LOG.info("Get {} config updated event from Redis server, {}={}, serviceId={}", getConfigType(globalConfig), groupKey, group, serviceId); RuleEntity ruleEntity = pluginAdapter.getRule(); String rule = null; if (ruleEntity != null) { rule = ruleEntity.getContent(); } if (!StringUtils.equals(rule, config)) { fireRuleUpdated(new RuleUpdatedEvent(config), true); } else { LOG.info("Retrieved {} config from Redis server is same as current config, ignore to update, {}={}, serviceId={}", getConfigType(globalConfig), groupKey, group, serviceId); } } else { LOG.info("Get {} config cleared event from Redis server, {}={}, serviceId={}", getConfigType(globalConfig), groupKey, group, serviceId); fireRuleCleared(new RuleClearedEvent(), true); } } }); } catch (Exception e) { LOG.error("Subscribe " + getConfigType(globalConfig) + " config from Redis server failed, " + groupKey + "=" + group + ", serviceId=" + serviceId, e); } } private String getConfigType(boolean globalConfig) { return globalConfig ? "global" : "partial"; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy