영사의 영어에서의 용법.NET 코어 - 구성 관리


안녕하세요.
본고에서 나는 영사 도구를 이야기하고 싶다. 이것은 우리가 사이트의 설정을 변경하거나 관리할 수 있도록 한다.NET 코어 포트는 사용자 인터페이스를 통해 중심점에 있습니다.우선 영사가 무엇인지, 영사가 우리에게 어떤 우위를 제공했는지 이야기해 봅시다.

영사가 뭐예요?


영사가 무엇인지, 그리고 그것이 우리에게 제공하는 장점/편의에 대해 토론하기 전에 신청합니다.응용 프로그램 기반 설정을 저장할 수 있는 자원을 살펴보자.
애플리케이션 기반 설정을 저장/저장할 수 있는 위치를 살펴보겠습니다.
1) 응용 프로그램 설정(appsettings.json, appsettings.development.json, 환경 변수 등)에서
2-) 데이터베이스에서
3-) 핵심 가치 상점(영사가 이곳에서 역할을 발휘한다)
  • 관련 데이터를 유사한 appsettings 파일에 저장합니다.제이슨은 우리에게 어떠한 성능 열세도 주지 않을 것이다.관련 설정을 키 값으로 관련 파일에 저장하기만 하면 우리는 관련 설정에 따라 작업을 수행할 수 있다.그러나 이러한 경우에는 UI를 통해 이러한 설정을 쉽게 관리할 수 없습니다.이 밖에 모든 개발자는 관련 설정 변경에 이 점을 제출해야 한다.
  • 우리가 데이터베이스 옵션을 볼 때 매번 데이터베이스에서 관련 설정을 얻고 해당하는 조작을 취하기 때문에 성능 손실이 발생할 수 있다.물론 이 점에서 이 성능 문제는 캐시 메커니즘을 사용하여 개선할 수 있지만, 설정을 바꾸면 캐시가 효력을 잃는 경우가 발생하기 때문에 우리가 소비하는 정력이 증가할 것이라고 할 수 있다.
  • 만약에 키 값 저장소에 설정을 저장하는 옵션을 고려한다면 (이것은 다른 방법) 우리는pub/sub 모드를 사용하여 프로그램이 실행될 때 관련 변경 사항을 불러올 수 있다. 그러면 우리는 매번 변경된 설정에 동적 접근할 수 있고 캐시가 효력을 잃는 것을 처리할 필요가 없다.
  • 여기서 우리의 옵션을 평가할 때, 설정을 키 값 저장소에 저장하면 우리의 업무를 더욱 쉽게 할 수 있고, 집중적인 설정 관리를 제공할 수 있음을 알 수 있다.이 때, 우리는 concur를 키 값 저장 옵션으로 사용할 수 있습니다.

    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);
                }
            }
        }
    }
    
  • 여기서 컨소시엄 클래스 덕분에 컨소시엄http://localhost:8500과 통신하는 간단한 방법을 만들었습니다. 여기서 키에 따라 원하는 값을 얻을 수 있습니다.
  • 탐색http://localhost:8500하고 Key/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");
        }
    }
    
  • 만약 우리가 이곳의 코드를 검사한다면ConsultDemoKey라는 클래스를 볼 수 있습니다.concur의 키 값에 따라 값을 분배할 때, 우리는 값을 json으로 정의하기 때문에, 클래스를 만들 수 있습니다.
  • Models 폴더 아래에서ConsultDemoKey 클래스를 정의할 수 있습니다. 아래와 같습니다.
  • 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"로 변경할 수 있음). 그러면 변경 내용이 화면에 동적으로 반영되는 것을 볼 수 있습니다.

    제 글을 읽어주셔서 감사합니다.다음 게시물 만나요.

    좋은 웹페이지 즐겨찾기