public FabioMessageHandler(FabioOptions options, string serviceName = null)
        {
            if (string.IsNullOrWhiteSpace(options.Url))
            {
                throw new InvalidOperationException("Fabio URL was not provided.");
            }

            _options     = options;
            _servicePath = string.IsNullOrWhiteSpace(serviceName) ? string.Empty : $"{serviceName}/";
        }
Example #2
0
    private static IConveyBuilder AddFabio(this IConveyBuilder builder, FabioOptions fabioOptions,
                                           HttpClientOptions httpClientOptions, Action <IConveyBuilder> registerConsul)
    {
        registerConsul(builder);
        builder.Services.AddSingleton(fabioOptions);

        if (!fabioOptions.Enabled || !builder.TryRegister(RegistryName))
        {
            return(builder);
        }

        if (httpClientOptions.Type?.ToLowerInvariant() == "fabio")
        {
            builder.Services.AddTransient <FabioMessageHandler>();
            builder.Services.AddHttpClient <IFabioHttpClient, FabioHttpClient>("fabio-http")
            .AddHttpMessageHandler <FabioMessageHandler>();


            builder.RemoveHttpClient();
            builder.Services.AddHttpClient <IHttpClient, FabioHttpClient>("fabio")
            .AddHttpMessageHandler <FabioMessageHandler>();
        }

        using var serviceProvider = builder.Services.BuildServiceProvider();
        var registration = serviceProvider.GetRequiredService <ServiceRegistration>();
        var tags         = GetFabioTags(registration.Name, fabioOptions.Service);

        if (registration.Tags is null)
        {
            registration.Tags = tags;
        }
        else
        {
            registration.Tags.AddRange(tags);
        }

        builder.Services.UpdateConsulRegistration(registration);

        return(builder);
    }
Example #3
0
 public static IBioWorldBuilder AddServiceClient <T>(this IBioWorldBuilder builder, string serviceName,
                                                     RestEaseOptions options, ConsulOptions consulOptions, FabioOptions fabioOptions,
                                                     HttpClientOptions httpClientOptions)
     where T : class
 => builder.AddServiceClient <T>(serviceName, options,
                                 b => b.AddFabio(fabioOptions, consulOptions, httpClientOptions));
Example #4
0
 public static IConveyBuilder AddFabio(this IConveyBuilder builder, FabioOptions fabioOptions,
                                       ConsulOptions consulOptions, HttpClientOptions httpClientOptions)
 => builder.AddFabio(fabioOptions, httpClientOptions, b => b.AddConsul(consulOptions, httpClientOptions));