Esempio n. 1
0
 public void AddBankReply(BankReply bankReply)
 {
     messageCount++;
     if (messageCount == expectedMessages)
     {
         bankReplies.Add(bankReply);
         var bestRate = bankReplies.Aggregate((i1, i2) => i1.interestRate < i2.interestRate ? i1 : i2);
         Console.WriteLine("Best rate: {0} with bank: {1}", bestRate.interestRate, bestRate.bankName);
         messageRouter.SendToRecipientList(bestRate);
     }
     else
     {
         bankReplies.Add(bankReply);
     }
 }
Esempio n. 2
0
        public void SendToRecipientList(BankReply bankReply)
        {
            using (var connection = _factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    string routingKey = "laurbaer_soap_response";

                    string jsonRecip = JsonConvert.SerializeObject(bankReply, Formatting.Indented);

                    Console.ForegroundColor = ConsoleColor.DarkCyan;
                    Console.WriteLine("[{0}] >> Sending to {1}",
                                      DateTime.Now.ToString("HH:mm:ss"), routingKey);

                    channel.ExchangeDeclare(exchange: Constants.DirectExchangeName,
                                            type: Constants.DirectExhangeType);

                    var body = Encoding.UTF8.GetBytes(jsonRecip);
                    channel.BasicPublish(exchange: Constants.DirectExchangeName,
                                         routingKey: routingKey,
                                         basicProperties: null,
                                         body: body);
                }
        }
Esempio n. 3
0
        public void CreateSecondConsumer()
        {
            var connection = _factory.CreateConnection();
            var channel    = connection.CreateModel();

            channel.ExchangeDeclare(exchange: Constants.DirectExchangeName, type: Constants.DirectExhangeType);

            Dictionary <string, object> args = new Dictionary <string, object>();

            args.Add("x-dead-letter-exchange", "dead_exchange");

            var queueName = channel.QueueDeclare("", false, false, false, args).QueueName;

            Console.WriteLine(queueName);
            channel.QueueBind(queue: queueName, exchange: Constants.DirectExchangeName, routingKey: "laurbaer_aggr");

            var consumer = new EventingBasicConsumer(channel);

            consumer.Received += (model, ea) =>
            {
                var body    = ea.Body;
                var probs   = ea.BasicProperties;
                var message = Encoding.UTF8.GetString(body);
                Console.ForegroundColor = ConsoleColor.DarkGreen;
                Console.WriteLine("[{0}] << received on {1}",
                                  DateTime.Now.ToString("HH:mm:ss"), message);



                BankReply loanRequest = null;
                try
                {
                    loanRequest = JsonConvert.DeserializeObject <BankReply>(message);
                }
                catch (JsonException ex)
                {
                    Dictionary <string, Object> err = new Dictionary <string, Object>();
                    err.Add("test", ex.Message);

                    Console.WriteLine(ex.Message);
                    Console.WriteLine("Sending to Dead letter chan.");
                    ea.Body = Encoding.ASCII.GetBytes(ex.Message);
                    channel.BasicNack(ea.DeliveryTag, false, false);
                    //Todo: Send to dead letter
                    return;
                }

                //If no correlationId found.. Dead letter channel or whatevr. also handle timeout
                BankQuoteAggregate bankQuoteAggregate = null;
                if (aggregators.TryGetValue(probs.CorrelationId, out bankQuoteAggregate))
                {
                    channel.BasicAck(ea.DeliveryTag, false);
                    bankQuoteAggregate.AddBankReply(loanRequest);
                }
                else
                {
                    //channel.BasicAck(ea.DeliveryTag, false);
                    //channel.BasicReject(ea.DeliveryTag, false);
                    channel.BasicNack(ea.DeliveryTag, false, false);
                }


                // Err channel here.
            };
            channel.BasicConsume(queue: queueName,
                                 noAck: false,
                                 consumer: consumer);
        }