Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
0
        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();
            }
        }
Esempio n. 4
0
        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;
            //});
        }