Эта статья из вклада Ли Вэйчао, если у вас есть хорошая статья, пожалуйста, свяжитесь со мной.
Центр настройки микросервисов Руководство по использованию Apollo, следующие документы организованы в соответствии с вики Apollo, а некоторые передовые практические инструкции и преобразования кода организованы на основе опыта работы автора.Если у вас есть какие-либо вопросы, свяжитесь с нами.
Центр конфигурации
До разделения на микросервисную архитектуру монолитному приложению требовалось управлять только одним набором конфигураций. После разделения на микрослужбы каждая система имеет свою собственную конфигурацию, которая отличается, и из-за потребностей управления службами некоторые конфигурации также необходимо динамически изменять, например, корректировка бизнес-параметров или необходимость совмещения ограничения тока и других функций. Центр конфигурации призван решить эту проблему.
Основные понятия конфигурации
- Конфигурация - это переменная только для чтения, независимая от программы.
- Одно и то же приложение ведет себя по-разному в разных конфигурациях
- Приложение не должно изменять конфигурацию
- Конфигурация сопровождает весь жизненный цикл приложения
- Параметры инициализации и рабочие параметры
- Конфигурации могут быть загружены несколькими способами
- Конфигурация требует управления
- Контроль разрешений (уровень приложения, изоляция релиза редактирования и т. д.)
- Управление конфигурацией кластера с несколькими средами
- Управление конфигурацией компонентов класса Framework
Центр конфигурации
- Настройка регистрации и отмены регистрации
- Управление конфигурацией
- Подписка на изменение конфигурации
Spring Environment
Среда — это абстракция двух ключевых элементов (профиль и свойства) среды приложения в контейнере Spring.
- profile
Профиль — это логическая группа, которая вступает в силу только тогда, когда профиль активируется при регистрации компонента в контейнере.
## 配置文件使用
spring.profiles.active=xxx
## 硬编码注解形式使用
@org.springframework.context.annotation.Profile
- properties
Свойства играют важную роль почти во всех приложениях и могут поступать из самых разных источников: файлы свойств, системные свойства JVM, системные переменные среды, JNDI, параметры контекста сервлета, специальные объекты свойств, карты и т. д. Связь между Environment и Properties заключается в предоставлении пользователям удобного интерфейса службы для настройки источников свойств и анализа свойств из них.
- Точки расширения весной
- Платформа Spring предоставляет удобный способ добавления пользовательских стратегий источников данных в Spring Environment, таких как @PropertySource.docs.spring.IO/весна/документы…
- Весенние ботинки предоставляет соответствующие методы расширения, такие как окружающая средаPostProcessor.docs.spring.IO/весенняя загрузка…
- Spring Boot также предоставляет настраиваемые расширения среды перед запуском.docs.spring.IO/весенняя загрузка…
Знакомство с Аполлоном
Введение
Apollo — это центр управления конфигурацией с открытым исходным кодом, разработанный отделом инфраструктуры Ctrip.Он может централизованно управлять конфигурацией различных сред и кластеров приложений.После изменения конфигурации его можно передать на сторону приложения в режиме реального времени, и он стандартизирован разрешения, управление процессами и другие функции.
Apollo поддерживает 4 измерения для управления конфигурацией в формате ключ-значение:
- заявление
Это хорошо понятно.Это приложение, которое фактически использует конфигурацию.Клиенту Apollo необходимо знать, кто является текущим приложением во время выполнения, чтобы он мог получить соответствующую конфигурацию. Каждое приложение должно иметь уникальный идентификатор. Мы считаем, что идентификатор приложения соответствует коду, поэтому его необходимо настроить в коде. Подробности см. в Руководстве пользователя клиента Java.
- окружающая обстановка
Настройте соответствующую среду.Клиенту Apollo необходимо знать, в какой среде находится текущее приложение во время выполнения, чтобы он мог получить конфигурацию приложения. Мы считаем, что среда не имеет никакого отношения к коду, один и тот же код, развернутый в разных средах, должен иметь возможность получать конфигурацию разных сред, поэтому среда указывается путем чтения конфигурации на машине (свойство env в server.properties ) по умолчанию, но для того, чтобы это было удобно для разработки, а также мы поддерживаем указание через Системные свойства во время выполнения.Подробности см. в Руководстве пользователя Java Client.
- кластер
Группировка различных экземпляров приложения, например, обычно может быть разделена по центрам обработки данных, экземпляры приложения в компьютерном зале в Шанхае разделены на один кластер, а экземпляры приложения в компьютерном зале в Пекине разделены на другой кластер. Для разных кластеров одна и та же конфигурация может иметь разные значения, например адреса zookeeper. Кластер задается чтением конфигурации на машине (свойство idc в server.properties) по умолчанию, но его также можно указать с помощью системных свойств во время выполнения.Подробности см. в Руководстве пользователя клиента Java.
- пространство имен (пространство имен)
Для группировки различных конфигураций в приложении пространство имен можно просто сравнить с файлами.Различные типы конфигураций хранятся в разных файлах, таких как файлы конфигурации базы данных, файлы конфигурации RPC и файлы конфигурации приложения. Приложения могут напрямую считывать пространство имен конфигурации общих компонентов, таких как DAL, RPC и т. д. Приложение также может настроить конфигурацию общих компонентов, унаследовав пространство имен конфигурации общих компонентов, например начальный номер подключения к базе данных DAL.
В то же время Apollo разработан на основе модели с открытым исходным кодом.GitHub.com/C trip Corp/Ах…
базовая модель
Ниже приведена базовая модель Аполлона:
- Пользователь изменяет и публикует конфигурацию в центре конфигурации.
- Центр конфигурации уведомляет клиента Apollo о наличии обновления конфигурации.
- Клиент Apollo извлекает последнюю конфигурацию из центра конфигурации, обновляет локальную конфигурацию и уведомляет приложение.
Описание архитектуры Аполлона
Сам проект Apollo разработан с использованием Spring Boot и Spring Cloud.
Сервер
Изображение выше кратко описывает общий дизайн Аполлона, на который мы можем смотреть снизу вверх:
- Служба конфигурации предоставляет такие функции, как чтение и отправка конфигурации, а объектом службы является клиент Apollo.
- Служба администратора предоставляет такие функции, как модификация конфигурации и публикации, а объект сервиса - портал Apollo (интерфейс управления).
- И служба Config, и служба администрирования представляют собой многоэкземплярные развертывания без сохранения состояния, поэтому вам необходимо зарегистрироваться в Eureka и следить за пульсом.
- Поверх Eureka мы настроили слой Meta Server, чтобы инкапсулировать интерфейс обнаружения службы Eureka.Клиент обращается к Meta Server через доменное имя, чтобы получить список служб конфигурации (IP+Port), а затем напрямую обращается к службе через IP+. Порт. Выполните балансировку нагрузки, повторите попытку при ошибке.
- Портал обращается к метасерверу через доменное имя, чтобы получить список служб администратора (IP+порт), а затем напрямую обращается к службе через IP+порт.В то же время он выполняет балансировку нагрузки и повторяет ошибку на стороне портала. .
- Чтобы упростить развертывание, мы фактически развернем три логические роли Config Service, Eureka и Meta Server в одном и том же процессе JVM.
клиент
- Клиент и сервер поддерживают длительное соединение, поэтому они могут получить обновление конфигурации в первый раз.
- Клиент также регулярно получает последнюю конфигурацию приложения с сервера центра конфигурации Apollo.
- Это резервный механизм, чтобы предотвратить обновление конфигурации из-за сбоя механизма push.
- Клиент периодически извлекает локальную версию, поэтому в целом для запланированной операции извлечения сервер возвращает 304 — Not Modified.
- Частота синхронизации по умолчанию извлекается каждые 5 минут, и клиент также может переопределить ее, указав системное свойство: apollo.refreshInterval во время выполнения в минутах.
- После того, как клиент получит последнюю конфигурацию приложения с сервера центра конфигурации Apollo, она будет сохранена в памяти
- Клиент будет кэшировать копию конфигурации, полученной с сервера, в локальной файловой системе.
- Когда служба недоступна или сеть недоступна, конфигурацию можно восстановить локально.
- Приложение получает последнюю конфигурацию от клиента Apollo и подписывается на уведомления об обновлении конфигурации.
Реализация длинного соединения — это использование асинхронной реализации + опрос.Для анализа конкретной реализации см. следующие две статьи.
Развертывание высокой доступности Apollo
В описании архитектуры Apollo мы упомянули, что и клиент, и портал сбалансированы по нагрузке на стороне клиента и получают доступ к службам в соответствии с ip+port, поэтому служба конфигурации и служба администрирования не имеют состояния и могут масштабироваться по горизонтали, а служба портала привязано в соответствии с использованием slb При переключении нескольких серверов то же самое верно и для метасервера. |Сценарий |Влияние |Понижение |Причина | |:----|:----|:----|:----| | Служба конфигурации отключается | Никакого эффекта | | Служба конфигурации не имеет состояния, и клиент повторно подключается к другим службам конфигурации | | Все службы конфигурации отключены | Клиент не может прочитать последнюю конфигурацию, и портал не действует | Когда клиент перезапускается, файл конфигурации локального кэша может быть прочитан | | | Служба администрирования отключается | Нет эффекта | | Служба администрирования не имеет статуса, и портал повторно подключается к другим службам администрирования | |Все службы администрирования отключены |Клиент не затрагивается, и портал не может обновить конфигурацию ||| | Портал переходит в автономный режим | Нет эффекта | | Имя домена портала привязано к нескольким серверам через slb и указывает на доступный сервер после повторной попытки | |Все порталы отключены |Клиент не затрагивается, и портал не может обновить конфигурацию ||| | Дата-центр отключается | Нет эффекта | | Развертывание нескольких центров обработки данных, данные полностью синхронизированы, доменное имя метасервера/портала автоматически переключается на другие уцелевшие центры обработки данных через slb |
Инструкции по применению Аполлона
Инструкции по применению
Руководство пользователя Аполлона
Руководство пользователя Java-клиента
Лучшие практики
Используется в Spring Boot и Spring Cloud.
- Каждое приложение должно иметь уникальный идентификатор.Мы считаем, что идентификатор приложения следует за кодом, поэтому его необходимо настроить в коде. Что касается удостоверения приложения, то оно должно быть унифицировано для стороннего промежуточного ПО, а расширение поддерживает удостоверение аполлона иspring.application.nameПоследовательный (подробности см. в коде fusion-config-apollo), то же верно и для другого промежуточного ПО.
- Если вы используете конфигурацию в коде во время разработки приложения, вы должны в полной мере использовать Spring Environment Profile, увеличить локальную логическую группировку local и закрыть локальную логическую группировку на этапе, не связанном с разработкой. В то же время отключите конфигурацию удаленного доступа apollo и добавьте -Denv=local в параметры виртуальной машины.
Следующий код используется для расширения идентификатора приложения apollo.spring.application.name, и увеличьте конфигурацию мониторинга. Мониторинг, как правило, является функцией, предоставляемой командой инфраструктуры. Он жестко закодирован в базовой структуре, и бизнес-сторона совершенно не знает об этом.
import com.ctrip.framework.apollo.ConfigService;
import com.ctrip.framework.apollo.spring.config.PropertySourcesConstants;
import com.ctrip.framework.foundation.internals.io.BOMInputStream;
import com.ctrip.framework.foundation.internals.provider.DefaultApplicationProvider;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringApplicationRunListener;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.annotation.Order;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.EnumerablePropertySource;
import org.springframework.core.env.PropertiesPropertySource;
import org.springframework.util.StringUtils;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Properties;
import java.util.Set;
/**
* ApolloSpringApplicationRunListener
* <p>
* SpringApplicationRunListener
* 接口说明 https://blog.csdn.net/u011179993/article/details/51555690https://blog.csdn.net/u011179993/article/details/51555690
*
* @author Weichao Li (liweichao0102@gmail.com)
* @since 2019-08-15
*/
@Order(value = ApolloSpringApplicationRunListener.APOLLO_SPRING_APPLICATION_RUN_LISTENER_ORDER)
@Slf4j
public class ApolloSpringApplicationRunListener implements SpringApplicationRunListener {
public static final int APOLLO_SPRING_APPLICATION_RUN_LISTENER_ORDER = 1;
private static final String APOLLO_APP_ID_KEY = "app.id";
private static final String SPRINGBOOT_APPLICATION_NAME = "spring.application.name";
private static final String CONFIG_CENTER_INFRA_NAMESPACE = "infra.monitor";
public ApolloSpringApplicationRunListener(SpringApplication application, String[] args) {
}
/**
* 刚执行run方法时
*/
@Override
public void starting() {
}
/**
* 环境建立好时候
*
* @param env 环境信息
*/
@Override
public void environmentPrepared(ConfigurableEnvironment env) {
Properties props = new Properties();
props.put(PropertySourcesConstants.APOLLO_BOOTSTRAP_ENABLED, true);
props.put(PropertySourcesConstants.APOLLO_BOOTSTRAP_EAGER_LOAD_ENABLED, true);
env.getPropertySources().addFirst(new PropertiesPropertySource("apolloConfig", props));
// 初始化appId
this.initAppId(env);
// 初始化基础架构提供的默认配置,需在项目中关联公共 namespaces
this.initInfraConfig(env);
}
/**
* 上下文建立好的时候
*
* @param context 上下文
*/
@Override
public void contextPrepared(ConfigurableApplicationContext context) {
}
/**
* 上下文载入配置时候
*
* @param context 上下文
*/
@Override
public void contextLoaded(ConfigurableApplicationContext context) {
}
@Override
public void started(ConfigurableApplicationContext context) {
}
@Override
public void running(ConfigurableApplicationContext context) {
}
@Override
public void failed(ConfigurableApplicationContext context, Throwable exception) {
}
/**
* 初始化 apollo appId
*
* @param env 环境信息
*/
private void initAppId(ConfigurableEnvironment env) {
String apolloAppId = env.getProperty(APOLLO_APP_ID_KEY);
if (StringUtils.isEmpty(apolloAppId)) {
//此处需要判断一下 meta-inf 下的文件中的 app id
apolloAppId = getAppIdByAppPropertiesClasspath();
if (StringUtils.isEmpty(apolloAppId)) {
String applicationName = env.getProperty(SPRINGBOOT_APPLICATION_NAME);
if (!StringUtils.isEmpty(applicationName)) {
System.setProperty(APOLLO_APP_ID_KEY, applicationName);
} else {
throw new IllegalArgumentException(
"config center must config app.id in " + DefaultApplicationProvider.APP_PROPERTIES_CLASSPATH);
}
} else {
System.setProperty(APOLLO_APP_ID_KEY, apolloAppId);
}
} else {
System.setProperty(APOLLO_APP_ID_KEY, apolloAppId);
}
}
/**
* 初始化基础架构提供的配置
*
* @param env 环境信息
*/
private void initInfraConfig(ConfigurableEnvironment env) {
com.ctrip.framework.apollo.Config apolloConfig = ConfigService.getConfig(CONFIG_CENTER_INFRA_NAMESPACE);
Set<String> propertyNames = apolloConfig.getPropertyNames();
if (propertyNames != null && propertyNames.size() > 0) {
Properties properties = new Properties();
for (String propertyName : propertyNames) {
properties.setProperty(propertyName, apolloConfig.getProperty(propertyName, null));
}
EnumerablePropertySource enumerablePropertySource =
new PropertiesPropertySource(CONFIG_CENTER_INFRA_NAMESPACE, properties);
env.getPropertySources().addLast(enumerablePropertySource);
}
}
/**
* 从 apollo 默认配置文件中取 app.id 的值,调整优先级在 spring.application.name 之前
*
* @return apollo app id
*/
private String getAppIdByAppPropertiesClasspath() {
try {
InputStream in = Thread.currentThread().getContextClassLoader()
.getResourceAsStream(DefaultApplicationProvider.APP_PROPERTIES_CLASSPATH);
if (in == null) {
in = DefaultApplicationProvider.class
.getResourceAsStream(DefaultApplicationProvider.APP_PROPERTIES_CLASSPATH);
}
Properties properties = new Properties();
if (in != null) {
try {
properties.load(new InputStreamReader(new BOMInputStream(in), StandardCharsets.UTF_8));
} finally {
in.close();
}
}
if (properties.containsKey(APOLLO_APP_ID_KEY)) {
String appId = properties.getProperty(APOLLO_APP_ID_KEY);
log.info("App ID is set to {} by app.id property from {}", appId, DefaultApplicationProvider.APP_PROPERTIES_CLASSPATH);
return appId;
}
} catch (Throwable ignore) {
}
return null;
}
}
Динамическое обновление
Поддержка типа автоматического обновления конфигурации Apollo, поддержка @Value @RefreshScope @ConfigurationProperties и динамическое обновление уровня журнала. См. ссылку ниже для конкретного кода.
- @Value
@Value Сам Apollo поддерживает динамическое обновление.Следует отметить, что если @Value использует выражения SpEL, динамическое обновление будет недействительным.
// 支持动态刷新
@Value("${simple.xxx}")
private String simpleXxx;
// 不支持动态刷新
@Value("#{'${simple.xxx}'.split(',')}")
private List<String> simpleXxxs;
- @RefreshScope
RefreshScope (org.springframework.cloud.context.scope.refresh) — это специальная реализация области, предоставляемая Spring Cloud для реализации конфигурации и горячей загрузки экземпляра.
Динамический процесс внедрения:
При изменении конфигурации вызовите refreshScope.refreshAll() или укажите bean-компонент. Извлеките все переменные параметров, кроме стандартных параметров (System, jndi, Servlet), поместите параметры исходной среды в новый контейнер Spring Context для перезагрузки и закройте новый контейнер после завершения. Извлеките обновленные параметры (за исключением стандартных параметров), сравните измененные элементы, опубликуйте событие изменения среды, и RefreshScope повторно создаст компонент с новыми параметрами среды. Процесс регенерации очень прост, очистите кэш refreshscope и уничтожьте бин, и в следующий раз из BeanFactory будет получен новый экземпляр (экземпляр использует новую конфигурацию).
- @ConfigurationProperties
apollo не поддерживает обновление ConfigurationProperties по умолчанию, которое необходимо обновлять с помощью EnvironmentChangeEvent.
- уровень журнала
apollo по умолчанию не поддерживает обновление уровня журнала, которое необходимо обновлять с помощью EnvironmentChangeEvent.
- EnvironmentChangeEvent (предоставляется Spring Cloud)
Когда EnvironmentChangeEvent наблюдается, у него будет список ключевых значений, которые изменились, и приложение будет использовать следующее: 1. Перепривязать любые bean-компоненты @ConfigurationProperties в контексте, см. org.springframework.cloud.context.properties.ConfigurationPropertiesRebinder для кода. 2. Установите уровень ведения журнала для любого свойства в logging.level.*, код см. в org.springframework.cloud.logging.LoggingRebinder. Поддержка динамического обновления
import com.ctrip.framework.apollo.model.ConfigChangeEvent;
import com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.context.environment.EnvironmentChangeEvent;
import org.springframework.cloud.context.scope.refresh.RefreshScope;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Configuration;
/**
* LoggerConfiguration
*
* @author Weichao Li (liweichao0102@gmail.com)
* @since 2019/11/14
*/
@Configuration
@Slf4j
public class ApolloRefreshConfiguration implements ApplicationContextAware {
private ApplicationContext applicationContext;
@Autowired
private RefreshScope refreshScope;
@ApolloConfigChangeListener
private void onChange(ConfigChangeEvent changeEvent) {
applicationContext.publishEvent(new EnvironmentChangeEvent(changeEvent.changedKeys()));
refreshScope.refreshAll();
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}
Обратите внимание, что если исходная конфигурация имеет уровень журнала, ее необходимо инициализировать.
import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.spring.annotation.ApolloConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.logging.LogLevel;
import org.springframework.boot.logging.LoggingSystem;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
import java.util.Set;
/**
* logging 初始化
*
* @author Weichao Li (liweichao0102@gmail.com)
* @since 2019/11/14
*/
@Configuration
@Slf4j
public class LoggingConfiguration {
private static final String LOGGER_TAG = "logging.level.";
private static final String DEFAULT_LOGGING_LEVEL = "info";
@Autowired
private LoggingSystem loggingSystem;
@ApolloConfig
private Config config;
@PostConstruct
public void changeLoggingLevel() {
Set<String> keyNames = config.getPropertyNames();
for (String key : keyNames) {
if (containsIgnoreCase(key, LOGGER_TAG)) {
String strLevel = config.getProperty(key, DEFAULT_LOGGING_LEVEL);
LogLevel level = LogLevel.valueOf(strLevel.toUpperCase());
loggingSystem.setLogLevel(key.replace(LOGGER_TAG, ""), level);
}
}
}
private static boolean containsIgnoreCase(String str, String searchStr) {
if (str == null || searchStr == null) {
return false;
}
int len = searchStr.length();
int max = str.length() - len;
for (int i = 0; i <= max; i++) {
if (str.regionMatches(true, i, searchStr, 0, len)) {
return true;
}
}
return false;
}
}
Передовой опыт Apollo — управление конфигурацией
Контроль доступа
Поскольку конфигурация может изменить поведение программы, а неправильная конфигурация может даже привести к катастрофе, модификация конфигурации должна иметь относительно полный контроль разрешений. Управление приложением и конфигурацией имеет полный механизм управления полномочиями, а управление конфигурацией также разделено на два звена: редактирование и публикация, чтобы уменьшить человеческие ошибки. Все операции имеют журналы аудита для легкого отслеживания проблем
- у каждого должен быть свой аккаунт (главное условие)
- У каждого проекта есть как минимум один владелец (администратор проекта, администратор проекта имеет следующие права)
- Возможность управлять назначениями разрешений для проектов
- Может создавать кластеры
- Пространство имен может быть создано
- Администратор проекта (владелец) назначает разрешения на настройку в соответствии с организационной структурой
- Разрешения на редактирование позволяют пользователям создавать, изменять и удалять конфигурации в интерфейсе Apollo.
- После изменения конфигурации изменяется только интерфейс Apollo, это не влияет на фактическую конфигурацию приложения.
- Разрешения на публикацию позволяют пользователям публиковать и откатывать конфигурации в интерфейсе Apollo.
- Конфигурация фактически используется приложением только после действий выпуска и отката.
- Apollo уведомляет приложение в режиме реального времени после того, как действие пользователя отменяется и откатывается, и вводит в действие последнюю конфигурацию.
- Разрешения на редактирование позволяют пользователям создавать, изменять и удалять конфигурации в интерфейсе Apollo.
- Интерфейс управления правами администратора проекта
После создания проекта права на редактирование и публикацию конфигурации по умолчанию не назначаются, и требуется авторизация администратора проекта.
- Нажмите кнопку авторизации пространства имен приложения.
- Назначить права на изменение
- Назначить права публикации
Namespace
Классификация разрешений пространства имен
Права доступа Apollo делятся на частные и общедоступные.
- частный
Пространство имен с частным разрешением может быть получено только приложением, которому оно принадлежит. Когда приложение пытается получить частное пространство имен другого приложения, Apollo сообщит об исключении «404».
- общественный
Пространство имен общедоступного разрешения, которое может быть получено любым приложением.
Классификация пространств имен
Пространство имен имеет три типа: частные типы, общедоступные типы и связанные типы (типы наследования).
Инструкции пространства имен закрытого типа Apollo
Пространства имен частных типов имеют частные разрешения. Например, пространство имен службы по умолчанию «приложение» является закрытым типом.
- сцены, которые будут использоваться
- Конфигурация самой службы (например, база данных, бизнес-поведение и т. д.)
- Как использовать пространство имен закрытого типа
Группировку различных конфигураций в приложении можно просто сравнить с файлом.Различные типы конфигураций хранятся в разных файлах, таких как файлы конфигурации базы данных, конфигурации бизнес-атрибутов, файлы конфигурации и т. д.
Инструкции по использованию пространства имен общедоступного типа Apollo
Пространства имен общедоступных типов имеют общедоступные разрешения. Общедоступное пространство имен эквивалентно конфигурации вне приложения, а общедоступное пространство имен идентифицируется по имени пространства имен, поэтому имя общедоступного пространства имен должно быть глобально уникальным.
- сцены, которые будут использоваться
- Конфигурация, доступная на уровне отдела
- Общая конфигурация на уровне группы
- Конфигурация совместно используется несколькими проектами
- Конфигурация клиента промежуточного программного обеспечения
- Как использовать пространство имен общедоступного типа
- вторжение в код
@EnableApolloConfig({"application", "poizon-infra.jaeger"})
- Форма конфигурации
# will inject 'application' namespace in bootstrap phase
apollo.bootstrap.enabled = true
# will inject 'application', 'poizon-infra.jaeger' namespaces in bootstrap phase
apollo.bootstrap.namespaces = application,poizon-infra.jaeger
Инструкции пространства имен типа ассоциации Apollo
Связанные типы также можно назвать унаследованными типами, а связанные типы имеют частные разрешения. Пространство имен связанного типа наследуется от пространства имен общедоступного типа и используется для переопределения некоторой конфигурации общедоступного пространства имен.
Рекомендации
- Унифицированная конфигурация базовой части платформы, такая как общая конфигурация DAL.
- Конфигурация общих компонентов инфраструктуры, таких как мониторинг, объединение и другие общие конфигурации компонентов.