/// <summary> /// Creates final decision from multiple decisions. /// Final decision has bests choices for each decision. /// </summary> internal static Decision CreateFinalDecision(Decision final, Decision decision) { bool allow = false; PutBackDecision putBack = PutBackDecision.No; bool save = false; DeliveryAcknowledgeDecision ack = DeliveryAcknowledgeDecision.None; if (decision.Allow) { allow = true; } if (decision.PutBack != PutBackDecision.No) { putBack = decision.PutBack; } if (decision.SaveMessage) { save = true; } if (decision.Acknowledge == DeliveryAcknowledgeDecision.Always) { ack = DeliveryAcknowledgeDecision.Always; } else if (decision.Acknowledge == DeliveryAcknowledgeDecision.IfSaved && final.Acknowledge == DeliveryAcknowledgeDecision.None) { ack = DeliveryAcknowledgeDecision.IfSaved; } return(new Decision(allow, save, putBack, ack)); }
/// <summary> /// Creates final decision from multiple decisions. /// Final decision has bests choices for each decision. /// </summary> internal static Decision CreateFinalDecision(Decision final, Decision decision) { bool allow = false; bool keep = false; bool save = false; DeliveryAcknowledgeDecision ack = DeliveryAcknowledgeDecision.None; if (decision.Allow) { allow = true; } if (decision.KeepMessage) { keep = true; } if (decision.SaveMessage) { save = true; } if (decision.SendAcknowledge == DeliveryAcknowledgeDecision.Always) { ack = DeliveryAcknowledgeDecision.Always; } else if (decision.SendAcknowledge == DeliveryAcknowledgeDecision.IfSaved && final.SendAcknowledge == DeliveryAcknowledgeDecision.None) { ack = DeliveryAcknowledgeDecision.IfSaved; } return(new Decision(allow, save, keep, ack)); }
/// <summary> /// Creates new decision with full parameters /// </summary> public Decision(bool allow, bool save, bool keep, DeliveryAcknowledgeDecision sendAcknowledge) { Allow = allow; SaveMessage = save; KeepMessage = keep; SendAcknowledge = sendAcknowledge; }
/// <summary> /// Creates new decision without keeping messages and acknowledge /// </summary> public Decision(bool allow, bool save) { Allow = allow; SaveMessage = save; KeepMessage = false; SendAcknowledge = DeliveryAcknowledgeDecision.None; }
/// <summary> /// Creates new decision with full parameters /// </summary> public Decision(bool allow, bool save, bool keep, DeliveryAcknowledgeDecision sendAcknowledge, QueueAcknowledgeDeliveryHandler acknowledgeDelivery) { Allow = allow; SaveMessage = save; KeepMessage = keep; SendAcknowledge = sendAcknowledge; AcknowledgeDelivery = acknowledgeDelivery; }
/// <summary> /// Creates new decision with full parameters /// </summary> public Decision(bool allow, bool save, PutBackDecision putBack, DeliveryAcknowledgeDecision ack, QueueAcknowledgeDeliveryHandler acknowledgeDelivery) { Allow = allow; SaveMessage = save; PutBack = putBack; Acknowledge = ack; AcknowledgeDelivery = acknowledgeDelivery; }
/// <summary> /// Creates new decision with full parameters /// </summary> public Decision(bool allow, bool save, PutBackDecision putBack, DeliveryAcknowledgeDecision ack) { Allow = allow; SaveMessage = save; PutBack = putBack; Acknowledge = ack; AcknowledgeDelivery = null; }
/// <summary> /// Creates new decision without keeping messages and acknowledge /// </summary> public Decision(bool allow, bool save) { Allow = allow; SaveMessage = save; PutBack = PutBackDecision.No; Acknowledge = DeliveryAcknowledgeDecision.None; AcknowledgeDelivery = null; }
/// <inheritdoc /> public virtual Task <Decision> AcknowledgeTimedOut(HorseQueue queue, MessageDelivery delivery) { DeliveryAcknowledgeDecision ack = ProducerAckDecision == ProducerAckDecision.AfterConsumerAckReceived ? DeliveryAcknowledgeDecision.Negative : DeliveryAcknowledgeDecision.None; return(Task.FromResult(new Decision(true, false, AckTimeoutPutBack, ack))); }
/// <inheritdoc /> public virtual Task <Decision> ReceivedFromProducer(HorseQueue queue, QueueMessage message, MqClient sender) { DeliveryAcknowledgeDecision save = DeliveryAcknowledgeDecision.None; if (ProducerAckDecision == ProducerAckDecision.AfterReceived) { save = DeliveryAcknowledgeDecision.Always; } else if (ProducerAckDecision == ProducerAckDecision.AfterSaved) { save = DeliveryAcknowledgeDecision.IfSaved; } return(Task.FromResult(new Decision(true, true, PutBackDecision.No, save))); }
/// <inheritdoc /> public virtual async Task <Decision> AcknowledgeReceived(HorseQueue queue, HorseMessage acknowledgeMessage, MessageDelivery delivery, bool success) { if (success && DeleteWhen == DeleteWhen.AfterAcknowledgeReceived) { await DeleteMessage(delivery.Message.Message.MessageId); } DeliveryAcknowledgeDecision ack = DeliveryAcknowledgeDecision.None; if (ProducerAckDecision == ProducerAckDecision.AfterConsumerAckReceived) { ack = success ? DeliveryAcknowledgeDecision.Always : DeliveryAcknowledgeDecision.Negative; } PutBackDecision putBack = success ? PutBackDecision.No : NegativeAckPutBack; return(new Decision(true, false, putBack, ack)); }
/// <summary> /// Decision: Allow. /// If AcknowledgeWhen is AfterAcknowledge, acknowledge is sent to producer. /// </summary> public async Task <Decision> AcknowledgeReceived(HorseQueue queue, HorseMessage acknowledgeMessage, MessageDelivery delivery, bool success) { DeliveryAcknowledgeDecision ack = DeliveryAcknowledgeDecision.None; if (_producerAck == AcknowledgeWhen.AfterAcknowledge) { ack = success ? DeliveryAcknowledgeDecision.Always : DeliveryAcknowledgeDecision.Negative; } PutBackDecision putBack = PutBackDecision.No; if (!success) { putBack = _consumerAckFail; } return(await Task.FromResult(new Decision(true, false, putBack, ack))); }