Beispiel #1
0
        private static async Task Main()
        {
            Console.WriteLine("\nEXAMPLE 1 : ONE-WAY MESSAGING : PRODUCER");

            const string ExchangeName = "";
            const string QueueName    = "example1_trades_queue";

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

            using var connection = connectionFactory.CreateConnection();

            using var channel = connection.CreateModel();

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

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

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

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

                await Task.Delay(millisecondsDelay : 5000);
            }
        }
Beispiel #2
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 #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 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);
            }
        }