영사의 영어에서의 용법.NET 코어 - 구성 관리
안녕하세요.
본고에서 나는 영사 도구를 이야기하고 싶다. 이것은 우리가 사이트의 설정을 변경하거나 관리할 수 있도록 한다.NET 코어 포트는 사용자 인터페이스를 통해 중심점에 있습니다.우선 영사가 무엇인지, 영사가 우리에게 어떤 우위를 제공했는지 이야기해 봅시다.
영사가 뭐예요?
영사가 무엇인지, 그리고 그것이 우리에게 제공하는 장점/편의에 대해 토론하기 전에 신청합니다.응용 프로그램 기반 설정을 저장할 수 있는 자원을 살펴보자.
애플리케이션 기반 설정을 저장/저장할 수 있는 위치를 살펴보겠습니다.
1) 응용 프로그램 설정(appsettings.json, appsettings.development.json, 환경 변수 등)에서
2-) 데이터베이스에서
3-) 핵심 가치 상점(영사가 이곳에서 역할을 발휘한다)
Consul acts as a distributed key-value store for us, a choice where we can keep our application settings in a central place and use them easily within the application.
영사의 영어에서의 용법.NET 핵심 어플리케이션
영사가 무엇인지, 그리고 그것이 우리에게 어떤 장점을 제공했는지 토론한 후에 우리는 이제 간단한 것을 만들 수 있다.NET 핵심 웹 API 프로젝트를 계속 사용합니다.
You can find the source code of the application at https://github.com/EngincanV/Asp.Net-Core-Consul-Demo.
먼저 Docker에서 영사 응용 프로그램을 실행합니다.우리는 아래의 명령을 사용하여 이 점을 실현할 수 있다.
docker run -d -p 8500:8500 -p 8600:8600/udp --name=my-consul consul agent -server -ui -node=server-1 -bootstrap-expect=1 -client=0.0.0.0
이 명령을 실행한 후 http://localhost:8500로 이동하면 다음 그림과 유사한 이미지가 표시됩니다.현재, Docker를 통해 영사 프로그램을 실행하고 있으며, 간단한 웹 API 프로젝트를 만들 수 있습니다.CLI를 통해 생성하는 경우 다음 명령을 사용하여 웹 API 프로젝트를 생성할 수 있습니다.
dotnet new webapi --name Consul.Demo --output .
프로그램을 만든 후, 우리는 Nuget을 통해 프로그램에 영사 패키지를 설치해야 한다.CLI에서 다음 명령을 사용하여 웹 API 프로젝트에 관련 패키지를 추가할 수 있습니다.dotnet add package Consul --version 1.6.10.3
관련 패키지를 추가한 후에, 프로그램에서Consor에서 정의한 설정을 사용할 수 있도록 필요한 설정을 해야 합니다. (다음 단계에서 정의할 것입니다.)먼저 Extensions라는 폴더를 만들고 ServiceCollectionExtensions라는 클래스를 만들어 다음 코드를 추가합니다.이 폴더에서
namespace Consul.Demo.Extensions
{
public static class ServiceCollectionExtensions
{
public static IServiceCollection AddConsulConfig(this IServiceCollection services, string configKey)
{
if(services == null)
{
throw new ArgumentNullException(nameof(services));
}
services.AddSingleton<IConsulClient>(consul => new ConsulClient(consulConfig =>
{
consulConfig.Address = new Uri(configKey);
}));
return services;
}
}
}
그다음에 창업.cs 또는 프로그램cs (.NET 6로 이 프로젝트를 만들었기 때문에 Startup.cs 클래스가 없습니다. 모든 설정은 이 클래스를 통해 제공됩니다..NET 6 프로젝트를 만들면 이 클래스에 다음 코드를 추가할 수 있습니다.) 파일을 열고 관련 설정을 제공합니다.using Consul.Demo.Extensions;
var builder = WebApplication.CreateBuilder(args);
var consulHost = "http://localhost:8500";
builder.Services.AddConsulConfig(configKey: consulHost);
builder.Services.AddControllers();
//...
관련 설정을 완성한 후, 간단한 공급자 클래스를 만들고, 이 방법에 전달된 키 값에 따라 필요한 값 유형을 되돌려 주는 방법을 작성합니다.이를 위해 Helpers라는 폴더를 만들고 ConsultKeyValueProvider라는 클래스를 추가하며 다음 코드로 클래스를 채웁니다.using System.Text;
using System.Text.Json;
namespace Consul.Demo.Helpers
{
public static class ConsulKeyValueProvider
{
public static async Task<T?> GetValueAsync<T>(string key)
{
using (var client = new ConsulClient())
{
var getPair = await client.KV.Get(key);
if (getPair?.Response == null)
{
return default(T);
}
var value = Encoding.UTF8.GetString(getPair.Response.Value, 0, getPair.Response.Value.Length);
return JsonSerializer.Deserialize<T>(value);
}
}
}
}
여기에서, 나는ConsultDemoKey라는 키를 만들고, 몇 개의 값 (Is Enabled, Show Message, Message) 을 분배했다. 위의 그림과 같다.지금, 내 생활 속에서.NET 핵심 응용 프로그램, 이전 단계에서 만든 Helper 방법으로ConsultDemoKey 키를 제공해서 이 값을 실현할 수 있어야 합니다.이 점을 실제적으로 테스트하기 위해서, Controllers 폴더 아래의 WeatherForecast Controller 클래스를 열고, Get 방법을 업데이트합니다. 아래와 같습니다.
using Consul.Demo.Helpers;
using Consul.Demo.Models;
using Microsoft.AspNetCore.Mvc;
namespace Consul.Demo.Controllers;
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
[HttpGet(Name = "GetWeatherForecast")]
public async Task<ActionResult> Get()
{
var consulDemoKey = await ConsulKeyValueProvider.GetValueAsync<ConsulDemoKey>(key: "ConsulDemoKey");
if(consulDemoKey != null && consulDemoKey.IsEnabled)
{
return Ok(consulDemoKey);
}
return Ok("ConsulDemoKey is null");
}
}
namespace Consul.Demo.Models
{
public class ConsulDemoKey
{
public bool IsEnabled { get; set; }
public bool ShowMessage { get; set; }
public string Message { get; set; }
}
}
현재 우리는 우리가 하고 싶은 모든 일을 완성했다. 이제 우리는 프로그램을 실행하고 결과를 볼 수 있다.프로그램을 실행하고/WeatherForecast 라우팅에 요청을 보내면 관련 값은 Consor에서 읽고 화면에 인쇄됩니다.
여기서 응용 프로그램을 닫지 않고 Concur를 통해 관련 값을 변경할 수 있습니다(예: 메시지를 "다이너믹 Configuration with Concur"로 변경할 수 있음). 그러면 변경 내용이 화면에 동적으로 반영되는 것을 볼 수 있습니다.
제 글을 읽어주셔서 감사합니다.다음 게시물 만나요.
Reference
이 문제에 관하여(영사의 영어에서의 용법.NET 코어 - 구성 관리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/engincanv/usage-of-consul-in-net-core-configuration-management-39h5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)