Один запуск файла для множества микросервисов - PullRequest
0 голосов
/ 04 марта 2020

Что вы думаете о реализации запуска одного файла для многих микросервисов? У меня много микросервисов с одинаковой конфигурацией, если у меня есть микросервис с заданной c конфигурацией, я бы реализовал указанный c Startup.

Ответы [ 4 ]

0 голосов
/ 11 марта 2020

Мое решение для этого, если оно кому-либо служит:

Аннотация класса с Base

public abstract class BaseStartup
{
    #region Constructors

    protected BaseStartup(IConfiguration configuration, IWebHostEnvironment environment)
    {
        Configuration = configuration;
        Environment = environment;
    }

    #endregion

    protected IConfiguration Configuration { get; }

    protected IWebHostEnvironment Environment { get; }

    public virtual void ConfigureServices(IServiceCollection services)
    {
        services.AddHealthCheck(Configuration);
        services.AddExpressiveAnnotations();
        services.AddConsul(Configuration, Environment);
        services.AddApiClients(Configuration);
        services.AddConsulConfiguration(Configuration, Environment);
        services.AddHttpContextAccessor();
        services.AddControllers();
        services.AddLogging(loggingBuilder => loggingBuilder.AddSerilog(dispose: true));
        services.AddDbContextBaseContext(Configuration);
        services.AddScrutorServiceAndRepository();
    }

    public virtual void Configure(IApplicationBuilder app)
    {
        app.UseHttpsRedirection();
        app.UseRouting();
        app.UseAuthorization();
        app.UseSwagger(Environment, Configuration);
        app.UseEndpointWithHealthService();
    }
}

И запуск микросервиса:

/// <summary>
/// Principal class for configuration app from net core
/// </summary>
public class Startup : BaseStartup
{
    /// <summary>
    /// Constructor of Startup
    /// </summary>
    /// <param name="configuration"></param>
    /// <param name="environment"></param>
    public Startup(IConfiguration configuration, IWebHostEnvironment environment) : base(configuration, environment)
    {
    }


    /// <summary>
    /// IoC of .NET Core for inject dependecy injection 
    /// </summary>
    /// <param name="services"></param>
    public override void ConfigureServices(IServiceCollection services)
    {
        base.ConfigureServices(services);
        services.AddSwagger(configuration: Configuration,
                            assemblyName: Assembly.GetExecutingAssembly().GetName().Name,
                            baseDirectory: AppContext.BaseDirectory);
        services.AddAutoMapper(typeof(TsrAutoMapperConfig).GetTypeInfo().Assembly);

    }

    /// <summary>
    /// Principal method load all configuration and runing the app
    /// </summary>
    /// <param name="app"></param>
    public override void Configure(IApplicationBuilder app)
    {
        app.UseDeveloperExceptionPage(Environment);
        app.UseLogActivityMiddleware(nameof(ApiIngestTSR));
        app.UseLogExceptionMiddleware(Environment, nameof(ApiIngestTSR));
        base.Configure(app);
    }
}
0 голосов
/ 04 марта 2020

Я обычно использую этот подход для микросервисных проектов.

Как правило, вы должны выяснить, в какой степени ваши сервисы совместно используют функциональность. Допустим, все ваши микросервисы используют Grp c в качестве основы для общения. В этом случае вполне допустимо иметь общий запуск, в котором вы регистрируете модули внедрения зависимостей, которые предоставляют конфигурацию и службы для включения общего Grp c logi c.

Однако вы всегда должны разрешать исполнителям обычного стартапа, к которому добавлен собственный лог c. Возможно, вы можете просто создать общую базу, но позволить своим разработчикам переопределить ее и добавить к ней пользовательские логики c.

0 голосов
/ 04 марта 2020

У вас может быть общий запуск, который предлагает ту базовую проводку c, которая нужна каждому микросервису, но затем дополнительные функции могут быть предоставлены с помощью методов расширения ServiceCollection и HostBuilder, которые могут быть доступны через общие библиотеки. В нашем микросервисном шасси мы выбрали подход ТАТ.

0 голосов
/ 04 марта 2020

Это зависит от того, существуют ли все ваши сервисы в одном репозитории, вы можете создать общий проект и использовать его в каждом сервисе. Если у вас есть репозиторий на сервис, лучшим решением будет создание частного фида Nuget и публикация sh вашего общего пакета. там, а затем добавить свой личный канал Nuget для каждого сервиса и использовать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...