Beispiel #1
0
        public void Start(QueueConfig consumerQueuConfig, QueueConfig producerQueueConfig, string filePath, ITimeProvider timeProvider, int quoteCurrencyDecimalPlances, int stepSize)
        {
            _outboundChannel = Channel.CreateBounded <byte[]>(new BoundedChannelOptions(100000)
            {
                FullMode = BoundedChannelFullMode.Wait, SingleReader = true, SingleWriter = true, AllowSynchronousContinuations = false
            });
            _outboundChannelReader  = _outboundChannel.Reader;
            _outboundChannelWritter = _outboundChannel.Writer;

            var tradeListner = new TradeListener(_outboundChannelWritter, timeProvider);

            _matchingEngine = new MatchingEngine(quoteCurrencyDecimalPlances, stepSize, tradeListner, new TimeProvider());

            _inboundChannel = Channel.CreateBounded <Message>(new BoundedChannelOptions(100000)
            {
                FullMode = BoundedChannelFullMode.Wait, SingleReader = true, SingleWriter = true, AllowSynchronousContinuations = false
            });
            _inboundChannelReader  = _inboundChannel.Reader;
            _inboundChannelWritter = _inboundChannel.Writer;

            _outboundQueueChannel = Channel.CreateBounded <byte[]>(new BoundedChannelOptions(100000)
            {
                FullMode = BoundedChannelFullMode.Wait, SingleReader = true, SingleWriter = true, AllowSynchronousContinuations = false
            });
            _outboundQueueChannelReader  = _outboundQueueChannel.Reader;
            _outboundQueueChannelWritter = _outboundQueueChannel.Writer;

            _outboundFileChannel = Channel.CreateBounded <byte[]>(new BoundedChannelOptions(100000)
            {
                FullMode = BoundedChannelFullMode.Wait, SingleReader = true, SingleWriter = true, AllowSynchronousContinuations = false
            });
            _outboundFileChannelReader  = _outboundFileChannel.Reader;
            _outboundFileChannelWritter = _outboundFileChannel.Writer;

            _tradeLogger   = new TradeLogger(filePath);
            _queueProducer = new QueueProducer(producerQueueConfig.ExchangeName, producerQueueConfig.ExchangeType, producerQueueConfig.QueueName, producerQueueConfig.RoutingKey, producerQueueConfig.HostName, producerQueueConfig.Vhost, producerQueueConfig.User, producerQueueConfig.Password);
            _queueConsumer = new QueueConsumer(consumerQueuConfig.ExchangeName, consumerQueuConfig.ExchangeType, consumerQueuConfig.QueueName, consumerQueuConfig.RoutingKey, consumerQueuConfig.HostName, consumerQueuConfig.Vhost, consumerQueuConfig.User, consumerQueuConfig.Password);

            _inboundQueueProcessor         = Task.Factory.StartNew(QueueConsumer);
            _inboundChannelProcessor       = Task.Factory.StartNew(async() => await InboundMessageProcessor());
            _outboundChannelProcessor      = Task.Factory.StartNew(async() => await OutboundMessageProcessor());
            _outboundQueueChannelProcessor = Task.Factory.StartNew(async() => await OutboundQueueMessageProcessor());
            _outboundFileChannelProcessor  = Task.Factory.StartNew(async() => await OutboundFileMessageProcessor());
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello I'm Producer");
            var factory = new ConnectionFactory
            {
                Uri = new Uri("amqp://*****:*****@localhost:5672")
            };

            using var connection = factory.CreateConnection();
            using var channel    = connection.CreateModel();
            while (true)
            {
                Console.Write("Enter consumer type (bank/chat): ");
                string consumerType = Console.ReadLine();
                Console.Write("Enter message to sent: ");
                string message = Console.ReadLine();
                QueueProducer.Publish(channel, consumerType, message);
            }
        }
Beispiel #3
0
        public async Task <IActionResult> RefuseOrder(int?stockId, double?value, int?transferId)
        {
            var msg = "";

            if (stockId == null || value == null || transferId == null)
            {
                if (stockId == null)
                {
                    if (value == null)
                    {
                        msg = "Stock identificator and order value are invalid";
                    }
                    else if (transferId == null)
                    {
                        msg = "Stock identificator and transfer identificator are invalid";
                    }
                    else
                    {
                        msg = "Stock identificator is invalid";
                    }
                }
                else if (value == null)
                {
                    if (transferId == null)
                    {
                        msg = "Order value and transfer identificator are invalid";
                    }
                    else
                    {
                        msg = "Transfer identificator is invalid";
                    }
                }
                else
                {
                    msg = "Transfer identificator is invalid";
                }
                return(StatusCode(400, msg));
            }
            var item = new StockTransferOrderModel();

            item.StockId    = stockId.GetValueOrDefault();
            item.Value      = value.GetValueOrDefault();
            item.TransferId = transferId.GetValueOrDefault();

            var stockResp = await stockService.RefuseStock(item);

            var transfResp = await transferService.RefuseTransfer(item);

            if (stockResp?.StatusCode == System.Net.HttpStatusCode.Forbidden || transfResp?.StatusCode == System.Net.HttpStatusCode.Forbidden)
            {
                if (stockResp?.StatusCode == System.Net.HttpStatusCode.Forbidden)
                {
                    await transferService.BookTransfer(item);
                }
                if (transfResp?.StatusCode == System.Net.HttpStatusCode.Forbidden)
                {
                    await stockService.BookStock(item);
                }
                QueueProducer.GetIntoQueueTillSuccess(async() =>
                {
                    using (var client = new HttpClient())
                    {
                        try
                        {
                            stockResp  = await stockService.RefuseStock(item);
                            transfResp = await transferService.RefuseTransfer(item);
                            if (stockResp?.StatusCode == System.Net.HttpStatusCode.Forbidden || transfResp?.StatusCode == System.Net.HttpStatusCode.Forbidden)
                            {
                                if (stockResp?.StatusCode == System.Net.HttpStatusCode.Forbidden)
                                {
                                    await transferService.BookTransfer(item);
                                }
                                if (transfResp?.StatusCode == System.Net.HttpStatusCode.Forbidden)
                                {
                                    await stockService.BookStock(item);
                                }
                                return(false);
                            }
                            return(true);
                        }
                        catch
                        {
                        }
                        return(false);
                    }
                });
                //return StatusCode(503, $"StockService: {(stockResp?.StatusCode != System.Net.HttpStatusCode.Forbidden ? "online" : "offline")}; " +
                //                       $"TransferService: {(transfResp?.StatusCode != System.Net.HttpStatusCode.Forbidden ? "online" : "offline")}");
            }
            if (stockResp?.StatusCode == System.Net.HttpStatusCode.NotFound)
            {
                item.OrderStatus = 20;
                msg = "Stock wasn't found";
                return(StatusCode(404, msg));
            }
            item.OrderStatus = 90;
            if (transfResp?.StatusCode == System.Net.HttpStatusCode.NoContent)
            {
                item.OrderStatus = item.OrderStatus + 2;
                msg = "No info for refusing transfer";
                return(StatusCode(404, msg));
            }
            if (transfResp?.StatusCode == System.Net.HttpStatusCode.NotFound)
            {
                item.OrderStatus += 3;
                msg = "Can't find transfer for refuse";
                return(StatusCode(404, msg));
            }
            item.OrderStatus += 9;
            //await orderService.RefuseOrder(item);
            return(Ok());
        }
Beispiel #4
0
 public StudentService(IHttpClientAccessor httpClientAccessor /*, WorkerQueueProducer workerQueueProducer*/)
 {
     _httpclient = httpClientAccessor.HttpClient;
     //_workerQueueProducer = workerQueueProducer;
     QueueProducer = new QueueProducer();
 }
Beispiel #5
0
        public void Start(string[] args)
        {
            var producer = new QueueProducer();

            producer.IgnoreHash = true;

            var completeCount = 0;
            var timeoutCount  = 0;

            for (var i = 0; i < 200; i++)
            {
                for (var j = 0; j < 100; j++)
                {
                    var msg = new SampleMessage
                    {
                        Text = "msg" + i.ToString() + "-" + j.ToString()
                    };

                    producer.Send("Queue" + i, msg);

                    Console.WriteLine(string.Format("send -> [{0}]", msg.Text));
                }

                var consumer = new QueueConsumer <SampleMessage>("Queue" + i, 10);
                consumers.Add(consumer);

                consumer.Receive((context) =>
                {
                    Thread.Sleep(100);

                    if (!context.Cancellation.IsCancellationRequested)
                    {
                        Console.WriteLine(string.Format("receiver 1, thread {0} -> [{1}]", Task.CurrentId, context.Message.Text));
                    }
                });

                consumer.Receive((context) =>
                {
                    Thread.Sleep(200);

                    if (!context.Cancellation.IsCancellationRequested)
                    {
                        Console.WriteLine(string.Format("receiver 2, thread {0} -> [{1}]", Task.CurrentId, context.Message.Text));
                    }
                });

                consumer.OnComplete((context) =>
                {
                    completeCount++;

                    foreach (var ex in context.Exceptions)
                    {
                        Console.WriteLine("excpetion: [" + ex.Message + "] [" + context.Message.Text + "]");
                    }
                });

                consumer.OnTimeout((context) =>
                {
                    timeoutCount++;
                    Console.WriteLine("timeout: [" + context.Message.Text + "]");
                });
            }
        }
 public MessageProducerController()
 {
     producer = new QueueProducer();
 }
Beispiel #7
0
        public async Task <ObjectResult> RefuseOrder(StockTransferOrderModel item)
        {
            var msg       = "";
            var stockResp = await stockService.RefuseStock(item);

            var transfResp = await transferService.RefuseTransfer(item);

            if (stockResp?.StatusCode == System.Net.HttpStatusCode.Forbidden || transfResp?.StatusCode == System.Net.HttpStatusCode.Forbidden)
            {
                if (stockResp?.StatusCode == System.Net.HttpStatusCode.Forbidden)
                {
                    await transferService.BookTransfer(item);
                }
                if (transfResp?.StatusCode == System.Net.HttpStatusCode.Forbidden)
                {
                    await stockService.BookStock(item);
                }
                QueueProducer.GetIntoQueueTillSuccess(async() =>
                {
                    using (var client = new HttpClient())
                    {
                        try
                        {
                            stockResp  = await stockService.RefuseStock(item);
                            transfResp = await transferService.RefuseTransfer(item);
                            if (stockResp?.StatusCode == System.Net.HttpStatusCode.Forbidden || transfResp?.StatusCode == System.Net.HttpStatusCode.Forbidden)
                            {
                                if (stockResp?.StatusCode == System.Net.HttpStatusCode.Forbidden)
                                {
                                    await transferService.BookTransfer(item);
                                }
                                if (transfResp?.StatusCode == System.Net.HttpStatusCode.Forbidden)
                                {
                                    await stockService.BookStock(item);
                                }
                                return(false);
                            }
                            return(true);
                        }
                        catch
                        {
                        }
                        return(false);
                    }
                });
                //return StatusCode(503, $"StockService: {(stockResp?.StatusCode != System.Net.HttpStatusCode.Forbidden ? "online" : "offline")}; " +
                //                       $"TransferService: {(transfResp?.StatusCode != System.Net.HttpStatusCode.Forbidden ? "online" : "offline")}");
            }
            if (stockResp?.StatusCode == System.Net.HttpStatusCode.NotFound)
            {
                item.Status = 20;
                msg         = "Stock wasn't found";
                return(StatusCode(404, msg));
            }
            item.Status = 90;
            if (transfResp?.StatusCode == System.Net.HttpStatusCode.NoContent)
            {
                item.Status = item.Status + 2;
                msg         = "No info for refusing transfer";
                return(StatusCode(404, msg));
            }
            if (transfResp?.StatusCode == System.Net.HttpStatusCode.NotFound)
            {
                item.Status += 3;
                msg          = "Can't find transfer for refuse";
                return(StatusCode(404, msg));
            }
            item.Status += 9;
            await orderService.RefuseOrder(item);

            eventBus.PublishEvent(new DeletedOrderEvent
            {
                User = "******"
            });
            return(StatusCode(200, msg));
        }
Beispiel #8
0
        static void Main(string[] args)
        {
            var consumers = new List <QueueConsumer <SampleMessage> >();
            var producer  = new QueueProducer();

            producer.IgnoreHash = true;

            var completeCount = 0;
            var timeoutCount  = 0;
            var sendData      = true;

            for (var i = 0; i < 10; i++)
            {
                var consumer = new QueueConsumer <SampleMessage>("Queue" + i, 10);
                consumers.Add(consumer);

                consumer.Receive((context) =>
                {
                    Thread.Sleep(100);

                    if (!context.Cancellation.IsCancellationRequested)
                    {
                        Console.WriteLine(string.Format("receiver 1, thread {0} -> [{1}]", Task.CurrentId, context.Message.Text));
                    }
                });

                consumer.Receive((context) =>
                {
                    Thread.Sleep(200);

                    if (!context.Cancellation.IsCancellationRequested)
                    {
                        Console.WriteLine(string.Format("receiver 2, thread {0} -> [{1}]", Task.CurrentId, context.Message.Text));
                    }
                });

                consumer.OnComplete((context) =>
                {
                    completeCount++;

                    foreach (var ex in context.Exceptions)
                    {
                        Console.WriteLine("excpetion: [" + ex.Message + "] [" + context.Message.Text + "]");
                    }
                });

                consumer.OnTimeout((context) =>
                {
                    timeoutCount++;
                    Console.WriteLine("timeout: [" + context.Message.Text + "]");
                });

                if (sendData)
                {
                    for (var j = 0; j < 10; j++)
                    {
                        var msg = new SampleMessage
                        {
                            Text = "msg" + i.ToString() + "-" + j.ToString()
                        };

                        producer.Send("Queue" + i, msg);

                        Console.WriteLine(string.Format("send -> [{0}]", msg.Text));
                    }
                }
            }

            while (true)
            {
                var text = Console.ReadLine();

                if (text == "exit")
                {
                    break;
                }
                else if (text == "complete")
                {
                    Console.WriteLine(completeCount);
                    continue;
                }
                else if (text == "timeout")
                {
                    Console.WriteLine(timeoutCount);
                    continue;
                }

                producer.Send("Queue0", new SampleMessage
                {
                    Text = text
                });

                Console.WriteLine(string.Format("send -> [{0}]", text));
            }

            foreach (var consumer in consumers)
            {
                consumer.Dispose();
            }
        }
Beispiel #9
0
        static async Task Main(string[] args)
        {
            var logger = new LoggerConfiguration()
                         .WriteTo.Console(theme: AnsiConsoleTheme.Literate)
                         .CreateLogger();


            Console.WriteLine("Azure Service Bus topics (Producer) tests: ");
            Console.WriteLine("Type 1 to test Azure Service Bus + Queue");
            Console.WriteLine("Type 2 to test Azure Service Bus + Topic");


            var line = Console.ReadLine();

            int.TryParse(line, out var selectedOption);
            Console.WriteLine($"selected option: {selectedOption}");

            if (selectedOption != 1 && selectedOption != 2)
            {
                Console.WriteLine("Please, select the correct options and try again");
                return;
            }

            Console.WriteLine("Type the Azure Service Bus Connection String: ");
            var connectionString = Console.ReadLine();

            if (selectedOption == 1)
            {
                logger.Information("Testing the messages sending to an Azure Service Bus + Queue");

                Console.WriteLine("Type the Queue name to send the messages: ");
                var queueName = Console.ReadLine();

                logger.Information($"Queue = {queueName}");

                var queueProducer = new QueueProducer(logger, new Queue.ExecutionParameters
                {
                    ConnectionString = connectionString,
                    Queue            = queueName
                });

                var messages = new List <string>();
                for (int i = 0; i < 5; i++)
                {
                    messages.Add($"Message from Client ({i})");
                }

                await queueProducer.SendMessagesAsync(messages);
            }
            else
            {
                logger.Information("Testing the messages sending to an Azure Service Bus + Topics");

                Console.WriteLine("Type the Topic name to send the messages: ");
                var topicName = Console.ReadLine();

                logger.Information($"Topic = {topicName}");

                var topicProducer = new TopicProducer(logger, new Topic.ExecutionParameters
                {
                    ConnectionString = connectionString,
                    Topic            = topicName
                });

                var messages = new List <string>();
                for (int i = 0; i < 5; i++)
                {
                    messages.Add($"Message from Client ({i})");
                }

                await topicProducer.SendMessagesAsync(messages);
            }
        }