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); } }
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); } }
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); } }
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); } }