static void Main(string[] args) { var builder = new ConfigurationBuilder(); builder.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); var config = builder.Build(); var rabbitConfig = config.GetSection("RabbitMQ"); var connectionFactory = new ConnectionFactory() { HostName = rabbitConfig["HostName"], UserName = rabbitConfig["UserName"], Password = rabbitConfig["Password"], Port = AmqpTcpEndpoint.UseDefaultPort }; var connection = new RabbitPersistentConnection(connectionFactory); var publisher = new RabbitPublisher(connection, rabbitConfig["Exchange"]); while (true) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("type your messages and press ENTER to send. Press CTRL+C to quit."); var text = Console.ReadLine(); try { var message = new Message() { Id = Guid.NewGuid(), CreationDate = DateTime.UtcNow, Text = text }; publisher.Publish(message); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("message sent!"); } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"an error has occurred while sending the message: {ex.Message}"); } Console.ResetColor(); } }
static void Main(string[] args) { var builder = new ConfigurationBuilder(); builder.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); builder.AddUserSecrets <Program>(); var config = builder.Build(); var connectionString = config["rabbit"]; var connectionFactory = new ConnectionFactory() { Uri = new Uri(connectionString) }; var connection = new RabbitPersistentConnection(connectionFactory); var publisher = new RabbitPublisher(connection); while (true) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("type your messages and press ENTER to send. Press CTRL+C to quit."); var text = Console.ReadLine(); try { var message = new Message() { Id = Guid.NewGuid(), CreationDate = DateTime.UtcNow, Text = text }; publisher.Publish(message); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("message sent!"); } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"an error has occurred while sending the message: {ex.Message}"); } Console.ResetColor(); } }
static void Main(string[] args) { var connectionString = Environment.GetEnvironmentVariable("rabbit"); var connectionFactory = new ConnectionFactory() { Uri = new Uri(connectionString) }; var connection = new RabbitPersistentConnection(connectionFactory); var publisher = new RabbitPublisher(connection); while (true) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("type your messages and press ENTER to send. Press CTRL+C to quit."); var text = Console.ReadLine(); try { var message = new Message() { Id = Guid.NewGuid(), CreationDate = DateTime.UtcNow, Text = text }; publisher.Publish(message); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("message sent!"); } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"an error has occurred while sending the message: {ex.Message}"); } Console.ResetColor(); } }
public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); services.AddServerSideBlazor(); services.AddDbContext <DataContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")) .EnableSensitiveDataLogging()); services.AddTransient <DbContext, DataContext>(); services.AddHttpClient <RequestResponseClient>("RequestResponseClient", client => { client.Timeout = TimeSpan.FromSeconds(10); }); services.AddTransient <IRequestResponseRepository>(ctx => { var context = ctx.GetRequiredService <DataContext>(); var requestResponseRepository = new RequestResponseRepository(context); return(requestResponseRepository); }); services.AddTransient <IHttpResponseEventRepository>(ctx => { var context = ctx.GetRequiredService <DataContext>(); var httpResponseEventRepository = new HttpResponseEventRepository(context); return(httpResponseEventRepository); }); services.AddTransient <IHttpClientInstance>(ctx => { var requestResponseClient = ctx.GetRequiredService <RequestResponseClient>().Client; var httpClientInstance = new HttpClientInstance(requestResponseClient); return(httpClientInstance); }); services.AddTransient <IConnectionFactory>(ctx => { var connStr = this.Configuration["Rabbit"]; var connFactory = new ConnectionFactory() { Uri = new Uri(connStr), DispatchConsumersAsync = true // This is mandatory to have Async Subscribers }; return(connFactory); }); services.AddTransient <IBusConnection>(ctx => { var connFactory = ctx.GetRequiredService <IConnectionFactory>(); var persistentConnection = new RabbitPersistentConnection(connFactory); return(persistentConnection); }); services.AddTransient <IHttpEventManager>(ctx => { var requestRepo = ctx.GetRequiredService <IRequestResponseRepository>(); var connection = ctx.GetRequiredService <IBusConnection>(); var httpEventManager = new HttpEventManager(requestRepo, connection); return(httpEventManager); }); services.AddTransient <ISubscriber>(ctx => { var busConn = ctx.GetRequiredService <IBusConnection>(); var subscriber = new RabbitSubscriber(busConn); return(subscriber); }); var channel = System.Threading.Channels.Channel.CreateBounded <RequestResponse>(100); services.AddSingleton(channel); services.AddTransient <IProducer>(ctx => { var channel = ctx.GetRequiredService <System.Threading.Channels.Channel <RequestResponse> >(); var logger = ctx.GetRequiredService <ILogger <RequestResponseProducer> >(); var instance = ctx.GetRequiredService <IHttpClientInstance>(); var requestRepo = ctx.GetRequiredService <IRequestResponseRepository>(); var eventRepo = ctx.GetRequiredService <IHttpResponseEventRepository>(); var producer = new RequestResponseProducer(channel.Writer, logger, instance, eventRepo); return(producer); }); services.AddTransient <IConsumer>(ctx => { var channel = ctx.GetRequiredService <System.Threading.Channels.Channel <RequestResponse> >(); var logger = ctx.GetRequiredService <ILogger <RequestResponseConsumer> >(); var consumer = new RequestResponseConsumer(channel.Reader, logger, 1); return(consumer); }); // DI'ing these as an IHostedService to automatically call the Start and Stop methods services.AddSingleton <IHostedService>(ctx => { var logger = ctx.GetRequiredService <ILogger <BackgroundPublisherWorker> >(); var httpEventManager = ctx.GetRequiredService <IHttpEventManager>(); var backgroundPublisherWorker = new BackgroundPublisherWorker(httpEventManager, logger); return(backgroundPublisherWorker); }); services.AddSingleton <IHostedService>(ctx => { var subscriber = ctx.GetRequiredService <ISubscriber>(); var producer = ctx.GetRequiredService <IProducer>(); var consumer = ctx.GetRequiredService <IConsumer>(); var logger = ctx.GetRequiredService <ILogger <BackgroundSubscriberWorker> >(); var backgroundSubscriberWorker = new BackgroundSubscriberWorker( subscriber, producer, new List <IConsumer>() { consumer }, logger); return(backgroundSubscriberWorker); }); //services.AddHostedService<BackgroundSubscriberWorker>(ctx => //{ // var subscriber = ctx.GetRequiredService<ISubscriber>(); // var producer = ctx.GetRequiredService<IProducer>(); // var consumer = ctx.GetRequiredService<IConsumer>(); // var logger = ctx.GetRequiredService<ILogger<BackgroundSubscriberWorker>>(); // var backgroundSubscriberWorker = new BackgroundSubscriberWorker( // subscriber, producer, new List<IConsumer>() { consumer }, logger); // return backgroundSubscriberWorker; //}); }