Зеркало Gitee (обновление не регулярное): https://gitee.com/kklldog/AgileConfig💖💖 В случае, когда вы не можете скачать образ с Docker Hub:
По известным причинам недоступность получения образов с Docker Hub в Китае стала проблемой. Поэтому был создан открытый репозиторий на Aliyun:
👉docker pull registry.cn-shanghai.aliyuncs.com/kklldog/agile_config:latest
👉docker pull registry.cn-shanghai.aliyuncs.com/kklldog/agile_config:test
❤️❤️ Демонстрационный адрес: AgileConfig Сервер Демо Логин: admin Пароль: 123456
.NET клиентский проект: AgileConfig_Client
JAVA клиентский проект: AgileConfig_JClient Пример проекта: AgileConfig MVCSample AgileConfig WPFSample AgileConfig ConsoleSample💥💥Обучающие материалы (пожалуйста, прочтите следующие статьи перед тем как задать вопрос): Обучение — Как использовать AgileConfig.Client для чтения конфигураций Обучение — Как использовать регистрацию и открытие служб Обучение — Как включить SSO
💥Часто задаваемые вопросы, обязательно прочитайте! ! ! Описание развертывания для нескольких окружений Как интегрироваться с OpenTelemetry для просмотра логов, трассировки и метрик
Комьюнити ресурсы: ✿ Базирующийся на Node.js клиент: node-agile-client ✿ Управление интерфейсом на основе Blazor: AgileConfigBlazorUI RESTful API: ✈️ RESTful API: ✈️ restful api
[❤️❤️❤️ Поддержка](#если вам понравился этот проект вы можете поддержать автора)## Основные характеристики
💥 Обязательно ознакомьтесь с данной документацией перед использованием AgileConfig## Архитектура
Архитектура AgileConfig довольно проста и состоит из трёх основных частей:
Клиентская программа представляет собой библиотеку, созданную с использованием netstandard2.0, что позволяет легко интегрировать её в .NET Core приложения. Установка осуществляется через NuGet поиска за agileconfig.client. При запуске клиентской части можно указывать адреса нескольких узлов, и клиент случайным образом выбирает один из них для соединения. После успешного подключения клиент поддерживает постоянное соединение WebSocket. В случае прерывания связи из-за отказа выбранного узла, клиент продолжает случайным образом выбирать другой узел до тех пор, пока не установится успешное соединение.
Узлы представляют собой службы, созданные с помощью ASP.NET Core. Для упрощения развертывания административная программа была объединена с узлами. Любое из этих узлов может быть настроено на открытие административной программы при старте путём установки соответствующих переменных окружения.### База данных
Данные хранятся в базах данных, поддерживаются пять типов реляционных баз данных (SQL Server
, MySQL
, SQLite
, PostgreSQL
, Oracle
) и одна нереляционная база данных (MongoDB
). В последней версии используется Freesql как компонент доступа к данным. Freesql лучше поддерживает работу с несколькими базами данных, особенно с китайскими базами данных. Однако, поскольку нет тестового окружения для китайских баз данных, данная возможность ещё не реализована. Тем не менее, если есть необходимость, я могу создать ветку для попытки поддержки, но тестирование будет зависеть от пользователя.### О высокой доступности
Узлы AgileConfig являются бесштатными, поэтому их можно горизонтально масштабировать для предотвращения однопунктных отказов. После того как клиент настраивает несколько адресов узлов, он случайным образом подключается к одному из них.
Проблема | Влияние | Описание |
---|---|---|
Отключение консоли управления | Невозможность обслуживания конфигураций, клиенту это не влияет | Поскольку консоль управления и узлы существуют вместе, то отключение одной консоли обычно также означает отключение одного узла |
Отключение одного узла | Клиент переходит к другому узлу | Это никак не повлияет |
Отключение всех узлов | Клиент читает конфигурацию из памяти | Запущенный клиент будет читать конфигурацию из памяти, а не запущенные клиенты будут повторно пытаться подключиться к узлам несколько раз, прежде чем попробовать прочитать конфигурацию из локального кэша файла, чтобы гарантировать запуск приложения |
Некоторые пользователи считают, что такая система малоэффективна, поскольку база данных всё равно является однопунктной, и если она выйдет из строя, всё сломается. Однако база данных имеет свои технологии обеспечения высокой доступности, такие как binlog для MySQL. Что касается обеспечения высокой доступности базы данных, пусть она сама этим занимается. Из архитектурной точки зрения база данных Apollo тоже является однопунктной.## Развертывание серверной части
Пользователю требуется создать пустую базу данных вручную; все таблицы будут созданы автоматически при первом запуске. Поддерживаемые типы баз данных: sqlserver, mysql, sqlite, PostgreSQL, Oracle.
Сопоставление провайдеров:
sqlserver = SqlServer
mysql = MySql
sqlite = Sqlite
npgsql = PostgreSql
oracle = Oracle
mongodb = MongoDB
Используйте Docker для запуска:
sudo docker run \
--name agile_config \
-e TZ=Asia/Shanghai \
-e adminConsole=true \
-e db__provider=sqlite \
-e db__conn="Data Source=agile_config.db" \
-p cqfd:5000 \
-d kklldog/agile_config:latest
Запуск Docker создаёт экземпляр agile_config
, который требует конфигурации трёх переменных окружения:
adminConsole
— указывает, является ли программа административным консольным приложением. Если значение равно true, то активируется функционал управления, и при обращении к этому экземпляру будет доступна страница управления.db__provider
— указывает тип используемой базы данных. Программа поддерживает следующие типы баз данных: sqlserver, mysql, sqlite, PostgreSQL, Oracle.db__conn
— строка подключения к базе данных.> 💥 Внимание: если вы используете IIS или другой способ развертывания, скачайте последнюю версию установочного пакета с страницы релизов. Если вы собираете проект самостоятельно, сначала скомпилируйте проект react-ui-antd и переместите содержимое директории dist
в директорию wwwroot/ui
проекта apisite
. При отладке содержимое должно быть помещено в директорию bin
. Используйте docker-compose
для запуска многонодового кластера. При установлении переменной окружения cluster=true
будет попытка получить IP адрес контейнера и активная регистрация в списке нод:```markdown
version: '3'
services:
agile_config_admin:
image: "kklldog/agile_config"
ports:
### Инициализация пароля администратора
При первом запуске программы требуется инициализировать пароль суперпользователя. Логин суперпользователя всегда равен `admin`.

### Ноды
AgileConfig поддерживает многонодовое развертывание, где все ноды являются параллельными. Для упрощения развертывания AgileConfig не имеет отдельного консольного приложения. Вы можете использовать любую ноду как консоль. Когда переменная окружения `adminConsole=true`, эта нода одновременно выполняет функции данных и управления.
> 💥 Внимание: даже если нода используется как консоль, она всё равно должна быть добавлена в управление программой, чтобы её можно было управлять.
### Приложения
AgileConfig поддерживает подключение нескольких приложений. Для каждого приложения требуется настройка имени, ID, ключа и других параметров.
Каждое приложение может быть настроено таким образом, чтобы его можно было наследовать. Приложения, которые могут быть наследованы, аналогичны понятию общего пространства имён Apollo. Общие конфигурации можно выделить в наследуемый модуль, а остальные приложения могут наследовать его, чтобы получить все конфигурации. Если ключи конфигураций повторяются между потомками и родителями, то конфигурация потомка будет переопределять конфигурацию родителя. Потомок может наследовать несколько приложений, если ключи конфигураций повторяются между несколькими приложениями, то конфигурация последнего наследованного приложения будет переопределять конфигурации ранее наследованных приложений.


### Конфигурационные параметрыПосле настройки информации о приложении можно настроить конфигурационные параметры для каждого приложения. Поддерживается группировка конфигурационных параметров. Новые добавленные конфигурационные параметры не будут восприниматься клиентской стороной до момента нажатия кнопки **«Publish»**. Изменённые, удалённые или откатившиеся конфигурационные параметры уже запущенного приложения будут немедленно отправлены клиентской стороне. Версионная история хранит историческую информацию о конфигурациях и позволяет вернуться к любой версии.


### Клиентская сторона
Консоль позволяет просматривать подключенные клиентские стороны.

## Использование клиента
Клиент [AgileConfig_Client](https://github.com/kklldog/AgileConfig_Client) представляет собой библиотеку, созданную с использованием .NET Core Standard 2.0 и выпущенную в NuGet для удобства интеграции пользователей.
### Установка клиентской библиотеки через NuGet
Install-Package AgileConfig.Client
### Инициализация клиента
На примере проекта ASP.NET Core MVC:
```json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
``` // agile_config
"AgileConfig": {
"appId": "app",
"secret": "xxx",
"nodes": "http://localhost:5000,http://localhost:5001", // несколько узлов разделены запятой
"name": "client_name",
"tag": "tag1",
"env": "DEV"
}
}
Задайте конфигурационные данные AgileConfig в файле appsettings.json.
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseAgileConfig(e => Console.WriteLine($"Конфигурация {e.Action}"))
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Используйте расширение UseAgileConfig для конфигурирования источника конфигураций.
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseAgileConfig(new ConfigClient($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json")), e => Console.WriteLine($"Конфигурация {e.Action}")
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Если вам требуется читать конфигурационные данные appsettings.{env}.json на основе переменной окружения, вы можете использовать Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT").
💥 Внимание: если ваше приложение является приложением Framework, пожалуйста, используйте AgileConfig.Client4FR — специальный клиент для Framework. Использование текущей версии может привести к мертвому замку и высокой нагрузке CPU.> 💥 Внимание: если узлы используют nginx как прокси, вам потребуется настроить nginx таким образом, чтобы он поддерживал протокол WebSocket, иначе долгое соединение между клиентом и узлами не сможет быть установлено.
AgileConfig поддерживает стандартный IConfiguration
для ASP.NET Core и режим чтения IOptions
.
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
private readonly IConfiguration _configuration;
private readonly IOptions<DbConfigOptions> _dbOptions;
}
public HomeController(ILogger<HomeController> logger, IConfiguration configuration, IOptions<DbConfigOptions> dbOptions)
{
_logger = logger;
_configuration = configuration;
_dbOptions = dbOptions;
}
public IActionResult Index()
{
return View();
}
/// <summary>
/// Чтение конфигурации с помощью IConfiguration
/// </summary>
/// <returns></returns>
public IActionResult ByIConfiguration()
{
var userId = _configuration["userId"];
var dbConn = _configuration["db:connection"];
ViewBag.userId = userId;
ViewBag.dbConn = dbConn;
return View();
}
/// <summary>
/// Чтение конфигурации с использованием паттерна Options
/// </summary>
/// <returns></returns>
public IActionResult ByOptions()
{
var dbConn = _dbOptions.Value.connection;
ViewBag.dbConn = dbConn;
return View("ByOptions");
}
}
Также можно получить этот экземпляр через IConfigClient
public class HomeController : Controller
{
private readonly IConfigClient _configClient;
public HomeController(IConfigClient configClient)
{
_configClient = configClient;
}
public IActionResult Index()
{
return View();
}
/// <summary>
/// Чтение конфигурации с помощью IConfigClient
/// </summary>
/// <returns></returns>
public IActionResult ByIConfigClient()
{
var userId = _configClient["userId"];
var dbConn = _configClient["db:connection"];
}
``` foreach (var item in _configClient.Data)
{
Console.WriteLine($"{item.Key} = {item.Value}");
}
ViewBag.userId = userId;
ViewBag.dbConn = dbConn;
return View();
}
}
Если у вас есть вопросы, вы можете связаться со мной по электронной почте: minj.zhou@gmail.com
Также вы можете присоединиться к QQ группе: 1022985150
UnitySir ¥100, Дэнь Чжунь ¥66.66, Шоу Цзе ¥6.66 + 88, Жиана ¥10.0, Нуллабле ¥9.99, Сань ¥6.66, ХХМ ¥6.66, Улыбающийся ассасин ¥6.66, Феникс и рыба ¥38.88, Хэн ¥9.9, Лах ¥6.66, Хай ¥6.66, Дицюань ¥30...
Еще много спонсоров, которых я не могу перечислить здесь. Конечно, вы также можете самостоятельно отредактировать этот файл и отправить мне Pull Request.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )