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()); }
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); } }
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()); }
public StudentService(IHttpClientAccessor httpClientAccessor /*, WorkerQueueProducer workerQueueProducer*/) { _httpclient = httpClientAccessor.HttpClient; //_workerQueueProducer = workerQueueProducer; QueueProducer = new QueueProducer(); }
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(); }
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)); }
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(); } }
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); } }