using Billing; using Billing.Contracts; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using NServiceBus; using OpenTelemetry.Resources; using OpenTelemetry.Trace; using Sales; using Sales.Contracts; using Shipping; using Shipping.Contracts; namespace Billing { class Program { static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } private static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseNServiceBus(_ => { var endpointConfiguration = new EndpointConfiguration("Billing"); var transport = endpointConfiguration.UseTransport<LearningTransport>(); endpointConfiguration.UsePersistence<LearningPersistence>(); var routing = transport.Routing(); routing.RouteToEndpoint( assembly: typeof(OrderPlaced).Assembly, destination: "Sales"); routing.RouteToEndpoint( assembly: typeof(OrderBilled).Assembly, destination: "Billing"); routing.RouteToEndpoint( assembly: typeof(ShippingLabelCreated).Assembly, destination: "Shipping"); return endpointConfiguration; }) .ConfigureServices(services => { services.AddHttpClient(); services.AddOpenTelemetryTracing(builder => { builder.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("Billing")); builder.AddSource("Billing"); builder.AddZipkinExporter(); builder.AddNServiceBusInstrumentation(); builder.AddHttpClientInstrumentation(); builder.AddEntityFrameworkCoreInstrumentation(); }); services.AddTransient<CreateShippingLabel>(); }); } }