private static List <string> GetDestinationsFor(ValidateCreditCardCharge validateCreditCardCharge) { var destinations = new List <string> { "ItOps.FreeCreditCardValidator.Endpoint" }; if (validateCreditCardCharge.Amount > 500) { destinations.Add("ItOps.ExpensiveCreditCardValidator.Endpoint"); } if (validateCreditCardCharge.Amount > 2000) { destinations.Add("ItOps.VeryExpensiveFraudDetection.Endpoint"); } destinations.Add("Finance.Endpoint"); return(destinations); }
public Task Handle(IOrderPlaced message, IMessageHandlerContext context) { Log.Info($"Order with Id {message.OrderId} placed. Validating..."); var order = new Order(message.OrderId, message.TotalValue); order.Status = OrderStatus.Validating; orders.Save(order); var validateCreditCardCharge = new ValidateCreditCardCharge { Amount = message.TotalValue, CorrelationId = order.OrderId }; List <string> destinations = GetDestinationsFor(validateCreditCardCharge); context.Route(validateCreditCardCharge, order.OrderId, destinations.ToArray()); return(Task.CompletedTask); }