public void Consume(NewOrderMessage pong) { State.Add(pong); sagaId = Id; LastState = State; wait.Set(); }
public void Add(NewOrderMessage request) { try { string sqlInsertOrder = "INSERT INTO Orders (OrderId, StoreId,OrderDate,OrderStatusId) Values (@OrderId, @StoreId,@OrderDate,@OrderStatusId)"; string sqlInsertProduct = " INSERT INTO Product (ProductId, OrderId) Values (@ProductId, @OrderId)"; using (var connection = new SqlConnection(_connectionString)) { connection.Execute(sqlInsertOrder, new { request.OrderId, request.StoreId, @OrderDate = DateTime.Now, @OrderStatusId = 1 }); if (request.Products == null || request.Products.Count == 0) { return; } foreach (var product in request.Products) { connection.Execute(sqlInsertProduct, new { @ProductId = product.ProductId, @OrderId = request.OrderId }); } } } catch (System.Exception ex) { } }
public void Publish(NewOrderMessage newOrderMessage) { var factory = new ConnectionFactory() { UserName = "******", Password = "******", HostName = "localhost" }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.QueueDeclare(QUEUE_NAME, false, false, false, null); var consumer = new EventingBasicConsumer(channel); try { string jsonString = JsonConvert.SerializeObject(newOrderMessage); var body = Encoding.UTF8.GetBytes(jsonString); channel.BasicPublish("", QUEUE_NAME, null, body); } catch (Exception e) { throw e; } } }
public void AddNewOrder(Order newOrder) { var orderId = Guid.NewGuid(); newOrder.Id = orderId; Datastore.TryAdd(orderId, newOrder); using (var bus = RabbitHutch.CreateBus(Settings.Default.RabbitMqConnectionString)) { var identity = User.Identity as ClaimsIdentity; var subjectId = identity?.Claims.FirstOrDefault(c => c.Type == "sub")?.Value; // TODO: re-think data/message shapes, coupling, and mapping <- pragmatic? var message = new NewOrderMessage { UserId = subjectId, Order = Mapper.Map <QueuingMessages.Order>(newOrder) }; bus.Publish(message); GlobalHost.ConnectionManager.GetHubContext <OrdersHub>() .Clients.Group(message.UserId) .orderCreated(); } }
private Task Handle(Message arg1, CancellationToken arg2) { NewOrderMessage newOrderMessage = JsonConvert.DeserializeObject <NewOrderMessage>(Encoding.UTF8.GetString(arg1.Body)); _orderSqlRepository.Add(newOrderMessage); return(Task.CompletedTask); }
static void Main(string[] args) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("RECEIVER has started. \nPress any key to stop."); var factory = new ConnectionFactory() { UserName = "******", Password = "******", HostName = "localhost" }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.QueueDeclare(QUEUE_NAME, false, false, false, null); var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { var body = ea.Body; var jsonString = Encoding.UTF8.GetString(body); NewOrderMessage newOrderMessage = JsonConvert.DeserializeObject <NewOrderMessage>(jsonString); Console.WriteLine($"Received{jsonString}"); using (var context = new FoodServiceContext()) { using (var transaction = context.Database.BeginTransaction()) { try { context.Order.Add(newOrderMessage.NewOrder); context.OrderCustomer.Add(newOrderMessage.NewOrderCustomer); context.OrderEmployee.Add(newOrderMessage.NewOrderEmployee); context.OrderItem.AddRange(newOrderMessage.NewOrderItems); context.SaveChanges(); transaction.Commit(); channel.BasicAck(ea.DeliveryTag, false); } catch (Exception e) { transaction.Rollback(); } } } }; try { channel.BasicConsume(QUEUE_NAME, false, consumer); Console.ReadKey(); } catch (Exception e) { throw e; } } }
private void OrderButton_Click(Object sender, EventArgs e) { var customerName = NameTextBox.Text; var drink = DrinkComboBox.Text; var drinkSize = (DrinkSize)Enum.Parse(typeof(DrinkSize), SizeComboBox.Text); var newOrder = new NewOrderMessage(customerName, drink, drinkSize); _bus.Send(newOrder); }
//private void OrdineAnnullatoDalDestinatario(AnnulloOrdineMessage message) //{ // throw new NotImplementedException(); //} private void OrdineInserito(NewOrderMessage message) { Console.WriteLine("OrdineInserito {0} {1} {2}", message.CorrelationId, message.OrderId, message.OrderType); var orderInsertedMessage = new OrderInsertedMessage { CorrelationId = message.CorrelationId, OrderId = message.OrderId, }; Bus.Context().Respond(orderInsertedMessage); }
public void ProcessNewOrder(NewOrderMessage message) { Name = message.Name; Drink = string.Format("{0} {1}", message.Size, message.Item); Console.WriteLine(string.Format("{0} for {1}, got it!", Drink, Name)); for (int i = 0; i < 10; i++) { Thread.Sleep(i * 200); Console.WriteLine("[wwhhrrrr....psssss...chrhrhrhrrr]"); } }
public void Add(NewOrderMessage request) { var collection = _mongoHelper.MongoDatabase.GetCollection <BsonDocument>("order"); var bsonDocumentRequest = new BsonDocument( new Dictionary <string, string> { { "OrderId", request.OrderId.ToString() }, { "StoreId", request.StoreId.ToString() }, { "Products", JsonConvert.SerializeObject(request.Products) } } ); collection.InsertOne(bsonDocumentRequest); }
public void Handle(NewOrderMessage message) { _view.NewOrder(new NewOrderView(message)); Data.Drink = message.Drink; Data.DrinkSize = message.DrinkSize; Data.OrderId = message.OrderId; Data.CustomerName = message.CustomerName; Data.Amount = CalculateAmountAccordingTo(message.DrinkSize); Bus.Publish(new PrepareOrderMessage(Data.CustomerName, Data.Drink, Data.DrinkSize, Data.OrderId)); Bus.Reply(new PaymentRequestMessage(Data.Amount, message.CustomerName, message.OrderId)); }
public NewOrderMessage ConvertToNewOrderMessage() { NewOrderMessage newOrder = new NewOrderMessage() { OrderId = OrderId, ProductionIds = ProductionIds, Products = ProductsOrder.Select(p => new ProductMessage() { ProductId = p.ProductId }).ToList(), Total = this.ProductsOrder.Sum(p => p.Price) }; return(newOrder); }
public void TopicSendMsg() { var send_msg = new NewOrderMessage { CreatedTime = DateTime.Now, OrderNum = "22222", PayType = 1, Price = 100M, ProductCode = 1, Source = Guid.NewGuid().ToString(), routeKey = "com.mq.rabbit.order"//这个根据自己定义,路由键,客户端消费需要订阅,匹配这个路由键才可以消费到。 }; rabbitMQProducer.TopicSend(send_msg); }
public void FanoutSendMsg() { var send_msg = new NewOrderMessage { CreatedTime = DateTime.Now, OrderNum = "33333", PayType = 1, Price = 100M, ProductCode = 1, Source = Guid.NewGuid().ToString() }; ///fanout模式 rabbitMQProducer.FanoutSend(send_msg); }
public void Handle(NewOrderMessage message) { _view.NewOrder(new NewOrderView(message)); Data.Drink = message.Drink; Data.DrinkSize = (int)message.DrinkSize; Data.OrderId = message.OrderId; Data.CustomerName = message.CustomerName; Data.Amount = CalculateAmountAccordingTo(message.DrinkSize); Bus.Send(new PrepareOrderMessage { CustomerName = Data.CustomerName, Drink = Data.Drink, DrinkSize = (DrinkSize)Data.DrinkSize, OrderId = Data.OrderId }); Bus.Reply(new PaymentRequestMessage { OrderId = Data.OrderId, CustomerName = Data.CustomerName, Amount = Data.Amount }); }
void ProcessNewOrder(NewOrderMessage message) { _name = message.Name; _item = message.Item; _size = message.Size; _amount = GetPriceForSize(_size); Console.WriteLine(string.Format("I've received an order for a {0} {1} for {2}.", _size, _item, _name)); var paymentDueMessage = new PaymentDueMessage { CorrelationId = message.CorrelationId, Amount = _amount, }; Bus.Context().Respond(paymentDueMessage); }
public IHttpActionResult AddNewOrder(Order newOrder) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var orderId = Guid.NewGuid(); newOrder.Id = orderId; try { Datastore.TryAdd(orderId, newOrder); } catch (Exception e) { string message = "We could not add the new order."; Log.Error(message + $" Reason: {0}", e); throw new OrderServiceException(message); } // TODO: Retry & exception handling using (var bus = RabbitHutch.CreateBus(Settings.Default.RabbitMqConnectionString)) { var identity = User.Identity as ClaimsIdentity; var subjectId = identity?.Claims.FirstOrDefault(c => c.Type == "sub")?.Value; var message = new NewOrderMessage { UserId = subjectId, Order = Mapper.Map <QueuingMessages.Order>(newOrder) }; // TODO: Exception handling bus.Publish(message); GlobalHost.ConnectionManager.GetHubContext <OrdersHub>() .Clients.Group(message.UserId) .orderCreated(); } return(Ok(newOrder)); }
public void DirecSendMsgWihtExchange() { var send_msg = new NewOrderMessage { CreatedTime = DateTime.Now, OrderNum = "111111", PayType = 1, Price = 100M, ProductCode = 1, Source = Guid.NewGuid().ToString(), exchangeName = "directExchange", queueName = "directOrder", routeKey = "order1" }; ///direct模式 rabbitMQProducer.DirectSend(send_msg); }
public ActionResult AddNewOrder([FromBody] DTOs.Order newOrder) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var orderId = Guid.NewGuid(); newOrder.Id = orderId; newOrder.Created = DateTime.UtcNow; try { Datastore.TryAdd(orderId, newOrder); } catch (Exception e) { string message = "We could not add the new order."; Log.Error(message + $" Reason: {0}", e); throw new OrderServiceException(message); } // TODO: Retry & exception handling using (var bus = RabbitHutch.CreateBus(_settings.RabbitMqConnectionString)) { var identity = User.Identity as ClaimsIdentity; var subjectId = identity?.Claims.FirstOrDefault(c => c.Type == "sub")?.Value; var message = new NewOrderMessage { UserId = subjectId, Order = Mapper.Map <Order>(newOrder) }; // TODO: Exception handling bus.Publish(message); _orderHubContext.Clients.Group(message.UserId).SendAsync("orderCreated"); } return(Ok()); }
public void TopicSendMsgWihtExchange() { var send_msg = new NewOrderMessage { CreatedTime = DateTime.Now, OrderNum = "22222", PayType = 1, Price = 100M, ProductCode = 1, Source = Guid.NewGuid().ToString(), exchangeName = "topicExchange", queueName = "topicOrder", routeKey = "com.mq.rabbit.order" }; ///Topic模式 //var routingKey = "com.mq.rabbit.order";//这个根据自己定义,路由键,客户端消费需要订阅,匹配这个路由键才可以消费到。 rabbitMQProducer.TopicSend(send_msg); }
private void button1_Click(object sender, EventArgs e) { _transactionId = CombGuid.Generate(); if (_unsubscribeToken != null) { _unsubscribeToken(); } _unsubscribeToken = Bus.SubscribeInstance(this); var message = new NewOrderMessage { CorrelationId = _transactionId, OrderId = ++_orderId, OrderType = "Ordine diretto" }; //Console.WriteLine("Prima del publish!"); Bus.Publish(message, x => x.SetResponseAddress(Bus.Endpoint.Address.Uri)); }
public void Run() { Console.WriteLine("Sono nel Run!"); _transactionId = CombGuid.Generate(); if (_unsubscribeToken != null) { _unsubscribeToken(); } _unsubscribeToken = Bus.SubscribeInstance(this); var message = new NewOrderMessage { CorrelationId = _transactionId, OrderId = 1, OrderType = "Ordine diretto" }; Console.WriteLine("Prima del publish!"); Bus.Publish(message, x => x.SetResponseAddress(Bus.Endpoint.Address.Uri)); }
public void Execute(NewOrderMessage message) { Data.CorrelationId = Guid.NewGuid(); Data.Meal = message.Name; Data.Size = message.Size; Console.WriteLine("New order recieved: Meal - {0}, Size - {1}, OrderId - {2}", message.Name, message.Size, message.CorrelationId); var prepFoodMessage = new PrepFoodMessage(Data.CorrelationId) { BunSize = message.Size }; Console.WriteLine("Prepping meal"); _bus.Publish(prepFoodMessage); var flipBurgerMessage = new CookBurgerMessage(Data.CorrelationId) { BurgerSize = message.Size }; Console.WriteLine("Cooking burger"); _bus.Publish(flipBurgerMessage); }
private void button1_Click(object sender, EventArgs e) { string drink = comboBox1.Text; string size = comboBox2.Text; string name = txtName.Text; _transactionId = CombGuid.Generate(); if (_unsubscribeToken != null) { _unsubscribeToken(); } _unsubscribeToken = Bus.SubscribeInstance(this); var message = new NewOrderMessage { CorrelationId = _transactionId, Item = drink, Name = name, Size = size, }; Bus.Publish(message, x => x.SetResponseAddress(Bus.Endpoint.Address.Uri)); }
public IActionResult AddNewOrder(CreateOrderModel createOrderModel) { var timestamp = DateTime.UtcNow; var newOrder = new Order { CustomerIdRef = Int32.Parse(createOrderModel?.CustomerSelected), EmployeeRef = Int32.Parse(createOrderModel?.EmployeeSelected), PaymentIdRef = Int32.Parse(createOrderModel?.PaymentSelected), Description = $"Ordered at {timestamp.ToShortDateString()} by {Int32.Parse(createOrderModel?.CustomerSelected)}. Employee: {Int32.Parse(createOrderModel?.EmployeeSelected)}", Status = (new OrderStatus { Status = OrderStatusEnum.Pending }).ToString(), Timestamp = timestamp, }; var newOrderCustomer = new OrderCustomer { CustomerIdRef = newOrder.CustomerIdRef, OrderIdRefNavigation = newOrder }; var newOrderEmployee = new OrderEmployee { EmployeeIdRef = newOrder.EmployeeRef, OrderIdRefNavigation = newOrder }; var newOrderItems = (from foodItem in createOrderModel?.FoodItemsSelected select new OrderItem { FoodItemIdRef = Int32.Parse(foodItem), Quantity = 1, Order = newOrder }).ToList(); var publisher = new Publisher.Publisher(); try { var newOrderMessage = new NewOrderMessage(newOrder, newOrderCustomer, newOrderEmployee, newOrderItems); publisher.Publish(newOrderMessage); string customerFullName = null; string employeeFullName = null; string paymentCode = null; decimal totalPrice = 0; using (var context = new FoodServiceContext()) { var customer = context.Customer.FirstOrDefault(x => x.CustomerId == newOrder.CustomerIdRef); customerFullName = $"{customer.FirstName}, {customer.LastName}"; var employee = context.Employee.FirstOrDefault(x => x.EmployeeId == newOrder.EmployeeRef); employeeFullName = $"{employee.FirstName}, {employee.LastName}"; var payment = context.Payment.FirstOrDefault(x => x.PaymentId == newOrder.PaymentIdRef); paymentCode = payment.Code; foreach (var orderItem in newOrderItems) { var foodItem = context.FoodItem.FirstOrDefault(x => x.FoodItemId == orderItem.FoodItemIdRef); totalPrice += foodItem.UnitPrice * orderItem.Quantity; } } var toAppend = $"<tr>" + $"<td>{customerFullName}</td>" + $"<td>{employeeFullName}</td>" + $"<td>{paymentCode}</td>" + $"<td>{newOrder.Status}</td>" + $"<td>{newOrder.Timestamp.ToString()}</td>" + $"<td>{totalPrice}</tr>"; return(Json(new { status = "OK", toAppend = toAppend })); } catch (Exception e) { return(Json(new { status = "ERROR" })); } }
private void ProcessRegisterMessage(OrderRegisterMessage regMsg) { DateTime?expDate; if (regMsg.TillDate == null || regMsg.TillDate == DateTimeOffset.MaxValue) { expDate = null; } else { expDate = regMsg.TillDate.Value.ToLocalTime(TimeHelper.Moscow); } BaseCommandMessage command; switch (regMsg.OrderType) { case OrderTypes.Limit: case OrderTypes.Market: { command = new NewOrderMessage { ByMarket = regMsg.OrderType == OrderTypes.Market, Client = regMsg.PortfolioName, Quantity = regMsg.Volume.To <int>(), Unfilled = regMsg.TimeInForce.ToTransaq(), BuySell = regMsg.Side.ToTransaq(), Price = regMsg.Price, SecId = (int)regMsg.SecurityId.Native, ExpDate = expDate, BrokerRef = regMsg.Comment, Hidden = (int)(regMsg.Volume - (regMsg.VisibleVolume ?? regMsg.Volume)), }; break; } case OrderTypes.Conditional: { var cond = (TransaqOrderCondition)regMsg.Condition; if (cond.Type == TransaqOrderConditionTypes.Algo) { command = new NewCondOrderMessage { ByMarket = regMsg.OrderType == OrderTypes.Market, Client = regMsg.PortfolioName, Quantity = regMsg.Volume.To <int>(), BuySell = regMsg.Side.ToTransaq(), Price = regMsg.Price, SecId = (int)regMsg.SecurityId.Native, CondType = cond.AlgoType ?? TransaqAlgoOrderConditionTypes.None, CondValue = cond.AlgoValue ?? 0m, ValidAfterType = cond.AlgoValidAfterType ?? TransaqAlgoOrderValidTypes.TillCancelled, ValidAfter = cond.AlgoValidAfter, ValidBeforeType = cond.AlgoValidBeforeType ?? TransaqAlgoOrderValidTypes.TillCancelled, ValidBefore = cond.AlgoValidBefore, ExpDate = expDate, BrokerRef = regMsg.Comment, Hidden = (int)(regMsg.Volume - (regMsg.VisibleVolume ?? regMsg.Volume)), }; } else // if (regMsg.Condition is TransaqOrderCondition) { if (!cond.CheckConditionUnitType()) { throw new InvalidOperationException(LocalizedStrings.Str3549); } var stopOrder = new NewStopOrderMessage { SecId = (int)regMsg.SecurityId.Native, Client = regMsg.PortfolioName, BuySell = regMsg.Side.ToTransaq(), LinkedOrderNo = cond.LinkedOrderId.To <string>(), ExpDate = expDate, ValidFor = expDate, }; switch (cond.Type) { case TransaqOrderConditionTypes.StopLoss: stopOrder.StopLoss = TransaqHelper.CreateStopLoss(cond); break; case TransaqOrderConditionTypes.TakeProfit: stopOrder.TakeProfit = TransaqHelper.CreateTakeProfit(cond); break; case TransaqOrderConditionTypes.TakeProfitStopLoss: stopOrder.StopLoss = TransaqHelper.CreateStopLoss(cond); stopOrder.TakeProfit = TransaqHelper.CreateTakeProfit(cond); break; } command = stopOrder; } //else // throw new InvalidOperationException(LocalizedStrings.Str3550Params.Put(regMsg.Condition, regMsg.TransactionId)); break; } case OrderTypes.Repo: { command = new NewRepoOrderMessage { SecId = (int)regMsg.SecurityId.Native, Client = regMsg.PortfolioName, BuySell = regMsg.Side.ToTransaq(), CpFirmId = regMsg.RepoInfo.Partner, MatchRef = regMsg.RepoInfo.MatchRef, BrokerRef = regMsg.Comment, Price = regMsg.Price, Quantity = regMsg.Volume.To <int>(), SettleCode = regMsg.RepoInfo.SettleCode, RefundRate = regMsg.RepoInfo.RefundRate, Rate = regMsg.RepoInfo.Rate, }; break; } case OrderTypes.ExtRepo: { command = new NewMRepoOrderMessage { SecId = (int)regMsg.SecurityId.Native, Client = regMsg.PortfolioName, BuySell = regMsg.Side.ToTransaq(), CpFirmId = regMsg.RepoInfo.Partner, MatchRef = regMsg.RepoInfo.MatchRef, BrokerRef = regMsg.Comment, Price = regMsg.Price, Quantity = regMsg.Volume.To <int>(), SettleCode = regMsg.RepoInfo.SettleCode, RefundRate = regMsg.RepoInfo.RefundRate, Value = regMsg.RepoInfo.Value, Term = regMsg.RepoInfo.Term, Rate = regMsg.RepoInfo.Rate, StartDiscount = regMsg.RepoInfo.StartDiscount, LowerDiscount = regMsg.RepoInfo.LowerDiscount, UpperDiscount = regMsg.RepoInfo.UpperDiscount, BlockSecurities = regMsg.RepoInfo.BlockSecurities, }; break; } case OrderTypes.Rps: { command = new NewRpsOrderMessage { SecId = (int)regMsg.SecurityId.Native, Client = regMsg.PortfolioName, BuySell = regMsg.Side.ToTransaq(), CpFirmId = regMsg.RpsInfo.Partner, MatchRef = regMsg.RpsInfo.MatchRef, BrokerRef = regMsg.Comment, Price = regMsg.Price, Quantity = regMsg.Volume.To <int>(), SettleCode = regMsg.RpsInfo.SettleCode, }; break; } case OrderTypes.Execute: { //command = new NewReportMessage //{ // BuySell = regMsg.Side.ToTransaq(), //}; //break; throw new NotImplementedException(); } default: throw new ArgumentOutOfRangeException(); } var result = SendCommand(command); _orders.Add(result.TransactionId, regMsg.TransactionId); _ordersTypes.Add(regMsg.TransactionId, command is NewCondOrderMessage ? OrderTypes.Limit : regMsg.OrderType); }
public Task <List <TransactionMetadata> > NewOrderAsync(NewOrder newOrder, Wallet wallet, TransactionOption options, bool sync = true) { TransactionMessage message = new NewOrderMessage(newOrder, wallet, options); return(BroadcastAsync(message.BuildMessageBody())); }
public NewOrderView(NewOrderMessage message) { CustomerName = message.CustomerName; Drink = message.Drink; DrinkSize = message.DrinkSize.ToString(); }