Beispiel #1
0
        private static async Task Main()
        {
            Console.WriteLine("EXAMPLE 6 : HEADERS : PRODUCER");

            var connectionFactory = new ConnectionFactory
            {
                HostName = "localhost",
                UserName = "******",
                Password = "******"
            };

            using var connection = connectionFactory.CreateConnection();

            using var channel = connection.CreateModel();

            const string ExchangeName = "example6_trades_exchange";

            channel.ExchangeDeclare(exchange: ExchangeName, type: ExchangeType.Headers);

            while (true)
            {
                var trade = TradeData.GetFakeTrade();

                var properties = channel.CreateBasicProperties();
                properties.Headers = new Dictionary <string, object>();
                properties.Headers.Add("region", trade.NormalizedRegion);
                properties.Headers.Add("industry", trade.NormalizedIndustry);

                channel.BasicPublish(
                    exchange: ExchangeName,
                    routingKey: string.Empty,
                    basicProperties: properties,
                    body: trade.ToBytes());

                DisplayInfo <Trade>
                .For(trade)
                .SetExchange(ExchangeName)
                .SetHeaders(properties.Headers.ToDictionary(header => header.Key, header => header.Value))
                .SetVirtualHost(connectionFactory.VirtualHost)
                .Display(Color.Cyan);

                await Task.Delay(millisecondsDelay : 5000);
            }
        }
Beispiel #2
0
        private static async Task Main()
        {
            Console.WriteLine($"\nEXAMPLE 3 : PUB/SUB : PRODUCER)");

            var connectionFactory = new ConnectionFactory
            {
                HostName = "localhost",
                UserName = "******",
                Password = "******"
            };

            using var connection = connectionFactory.CreateConnection();

            using var channel = connection.CreateModel();

            const string QueueName = "";

            const string ExchangeName = "example3_forecasts_exchange";

            channel.ExchangeDeclare(exchange: ExchangeName, type: ExchangeType.Fanout);

            while (true)
            {
                var forecast = Thermometer.Fake().Report();

                channel.BasicPublish(
                    exchange: ExchangeName,
                    routingKey: QueueName,
                    body: Encoding.UTF8.GetBytes(forecast.ToJson())
                    );

                DisplayInfo <Forecast>
                .For(forecast)
                .SetExchange(ExchangeName)
                .SetQueue(QueueName)
                .SetRoutingKey(QueueName)
                .SetVirtualHost(connectionFactory.VirtualHost)
                .Display(Color.Cyan);

                await Task.Delay(millisecondsDelay : 3000);
            }
        }
Beispiel #3
0
        private static async Task Main()
        {
            Console.WriteLine("\nEXAMPLE 5 : TOPICS : PRODUCER");

            var connectionFactory = new ConnectionFactory
            {
                HostName = "localhost",
                UserName = "******",
                Password = "******"
            };

            using var connection = connectionFactory.CreateConnection();

            using var channel = connection.CreateModel();

            const string ExchangeName = "example5_trades_exchange";

            channel.ExchangeDeclare(exchange: ExchangeName, type: ExchangeType.Topic);

            while (true)
            {
                var trade = TradeData.GetFakeTrade();

                var topic = $"{trade.NormalizedRegion}.{trade.NormalizedIndustry}.{trade.NormalizedAction}";

                channel.BasicPublish(
                    exchange: ExchangeName,
                    routingKey: topic,
                    body: trade.ToBytes());

                DisplayInfo <Trade>
                .For(trade)
                .SetExchange(ExchangeName)
                .SetRoutingKey(topic)
                .SetTopic(topic)
                .SetVirtualHost(connectionFactory.VirtualHost)
                .Display(Color.Cyan);

                await Task.Delay(millisecondsDelay : 5000);
            }
        }
Beispiel #4
0
        private static void Main(string[] topics)
        {
            Console.WriteLine("\nEXAMPLE 5 : TOPICS : CONSUMER");

            if (topics == null || topics.Length < 1)
            {
                Console.WriteLine("\nMessage type not specified. Try the following:".Pastel(Color.Tomato));
                Console.WriteLine("  - dotnet run # (match all)".Pastel(Color.Tomato));
                Console.WriteLine("  - dotnet run australia.*.buy (match australia.software.buy, australia.banking.buy etc)".Pastel(Color.Tomato));
                Console.WriteLine("  - dotnet run *.software.sell (match usa.software.sell, greatbritain.software.sell etc)".Pastel(Color.Tomato));
                Console.WriteLine();
                Environment.ExitCode = 1;
                return;
            }

            var connectionFactory = new ConnectionFactory
            {
                HostName = "localhost",
                UserName = "******",
                Password = "******"
            };

            using var connection = connectionFactory.CreateConnection();

            using var channel = connection.CreateModel();

            const string ExchangeName = "example5_trades_exchange";

            channel.ExchangeDeclare(exchange: ExchangeName, type: ExchangeType.Topic);

            var queue = channel.QueueDeclare();

            foreach (var topic in topics)
            {
                Console.WriteLine(topic);
                channel.QueueBind(
                    queue: queue.QueueName,
                    exchange: ExchangeName,
                    routingKey: topic);
            }

            var consumer = new EventingBasicConsumer(channel);

            consumer.Received += (sender, eventArgs) =>
            {
                var messageBody = eventArgs.Body.ToArray();
                var trade       = Trade.FromBytes(messageBody);

                DisplayInfo <Trade>
                .For(trade)
                .SetExchange(eventArgs.Exchange)
                .SetQueue(queue.QueueName)
                .SetRoutingKey(eventArgs.RoutingKey)
                .SetTopic(eventArgs.RoutingKey)
                .SetVirtualHost(connectionFactory.VirtualHost)
                .Display(Color.Yellow);

                channel.BasicAck(eventArgs.DeliveryTag, multiple: false);
            };

            channel.BasicConsume(
                queue: queue.QueueName,
                autoAck: false,
                consumer: consumer);

            Console.ReadLine();
        }
Beispiel #5
0
        private static async Task Main()
        {
            Console.WriteLine("EXAMPLE 4 : ROUTING : PRODUCER");

            var connectionFactory = new ConnectionFactory
            {
                HostName = "localhost",
                UserName = "******",
                Password = "******"
            };

            using var connection = connectionFactory.CreateConnection();

            using var channel = connection.CreateModel();

            const string ExchangeName = "example4_trades_exchange";

            channel.ExchangeDeclare(
                exchange: ExchangeName,
                type: ExchangeType.Direct,
                durable: false,
                autoDelete: false,
                arguments: ImmutableDictionary <string, object> .Empty);

            var QueueNames = TradeData
                             .Regions
                             .Select(region =>
            {
                var normalizedRegion = region.ToLower().Trim().Replace(" ", string.Empty);
                var queueName        = $"example4_trades_{normalizedRegion}_queue";
                return(new KeyValuePair <string, string>(region, queueName));
            })
                             .ToImmutableDictionary();

            foreach (var region in TradeData.Regions)
            {
                var queue = channel.QueueDeclare(
                    queue: QueueNames[region],
                    durable: false,
                    exclusive: false,
                    autoDelete: false,
                    arguments: ImmutableDictionary <string, object> .Empty);

                channel.QueueBind(
                    queue: queue.QueueName,
                    exchange: ExchangeName,
                    routingKey: region,
                    arguments: ImmutableDictionary <string, object> .Empty);
            }

            while (true)
            {
                var trade = TradeData.GetFakeTrade();

                string routingKey = trade.Region;

                channel.BasicPublish(
                    exchange: ExchangeName,
                    routingKey: routingKey,
                    body: trade.ToBytes()
                    );

                DisplayInfo <Trade>
                .For(trade)
                .SetExchange(ExchangeName)
                .SetRoutingKey(routingKey)
                .SetVirtualHost(connectionFactory.VirtualHost)
                .Display(Color.Cyan);

                await Task.Delay(millisecondsDelay : 3000);
            }
        }
Beispiel #6
0
        private static void Main(string[] regions)
        {
            Console.WriteLine("\nEXAMPLE 4 : ROUTING : CONSUMER");

            var region = regions.FirstOrDefault() ?? string.Empty;

            var QueueNames = TradeData
                             .Regions
                             .Select(region =>
            {
                var normalizedRegion = region.ToLower().Trim().Replace(" ", string.Empty);
                var queueName        = $"example4_trades_{normalizedRegion}_queue";
                return(new KeyValuePair <string, string>(region, queueName));
            })
                             .ToImmutableDictionary();

            if (!QueueNames.ContainsKey(region))
            {
                Console.WriteLine($"\nInvalid region '{region}'.".Pastel(Color.Tomato));
                Console.WriteLine($"Enter valid region name to start ({string.Join(", ", QueueNames.Keys)})".Pastel(Color.Tomato));
                Console.WriteLine();
                Environment.ExitCode = 1;
                return;
            }

            var connectionFactory = new ConnectionFactory
            {
                HostName = "localhost",
                UserName = "******",
                Password = "******"
            };

            using var connection = connectionFactory.CreateConnection();

            using var channel = connection.CreateModel();

            const string ExchangeName = "example4_trades_exchange";

            channel.ExchangeDeclare(
                exchange: ExchangeName,
                type: ExchangeType.Direct,
                durable: false,
                autoDelete: false,
                arguments: ImmutableDictionary <string, object> .Empty);

            var queue = channel.QueueDeclare(
                queue: QueueNames[region],
                durable: false,
                exclusive: false,
                autoDelete: false,
                arguments: ImmutableDictionary <string, object> .Empty);

            channel.QueueBind(
                queue: queue.QueueName,
                exchange: ExchangeName,
                routingKey: region);

            var consumer = new EventingBasicConsumer(channel);

            consumer.Received += (sender, eventArgs) =>
            {
                var messageBody = eventArgs.Body.ToArray();
                var trade       = Trade.FromBytes(messageBody);

                DisplayInfo <Trade>
                .For(trade)
                .SetExchange(eventArgs.Exchange)
                .SetQueue(queue.QueueName)
                .SetRoutingKey(eventArgs.RoutingKey)
                .SetVirtualHost(connectionFactory.VirtualHost)
                .Display(Color.Yellow);

                channel.BasicAck(eventArgs.DeliveryTag, multiple: false);
            };

            channel.BasicConsume(
                queue: queue.QueueName,
                autoAck: false,
                consumer: consumer);

            Console.ReadLine();
        }