protected SubscribeOptions(ISubscribeOptionsBuilder builder, bool pull, bool ordered, string deliverSubject, string deliverGroup) { Pull = pull; Bind = builder.Bind; Ordered = ordered; MessageAlarmTime = builder.MessageAlarmTime; if (Ordered && Bind) { throw JsSoOrderedNotAllowedWithBind.Instance(); } Stream = Validator.ValidateStreamName(builder.Stream, builder.Bind); string durable = Validator.ValidateMustMatchIfBothSupplied(builder.Durable, builder.Cc?.Durable, JsSoDurableMismatch); durable = Validator.ValidateDurable(durable, builder.Bind); deliverGroup = Validator.ValidateMustMatchIfBothSupplied(deliverGroup, builder.Cc?.DeliverGroup, JsSoDeliverGroupMismatch); deliverSubject = Validator.ValidateMustMatchIfBothSupplied(deliverSubject, builder.Cc?.DeliverSubject, JsSoDeliverSubjectGroupMismatch); if (Ordered) { Validator.ValidateNotSupplied(deliverGroup, JsSoOrderedNotAllowedWithDeliverGroup); Validator.ValidateNotSupplied(durable, JsSoOrderedNotAllowedWithDurable); Validator.ValidateNotSupplied(deliverSubject, JsSoOrderedNotAllowedWithDeliverSubject); long hb = DefaultOrderedHeartbeat; if (builder.Cc != null) { // want to make sure they didn't set it or they didn't set it to something other than none if (builder.Cc._ackPolicy != null && builder.Cc._ackPolicy != AckPolicy.None) { throw JsSoOrderedRequiresAckPolicyNone.Instance(); } if (builder.Cc.MaxDeliver > 1) { throw JsSoOrderedRequiresMaxDeliver.Instance(); } Duration ccHb = builder.Cc.IdleHeartbeat; if (ccHb != null && ccHb.Millis > hb) { hb = ccHb.Millis; } } ConsumerConfiguration = ConsumerConfiguration.Builder(builder.Cc) .WithAckPolicy(AckPolicy.None) .WithMaxDeliver(1) .WithFlowControl(hb) .WithAckWait(Duration.OfHours(22)) .Build(); } else { ConsumerConfiguration = ConsumerConfiguration.Builder(builder.Cc) .WithDurable(durable) .WithDeliverSubject(deliverSubject) .WithDeliverGroup(deliverGroup) .Build(); } }
// Validation is done by base class private PushSubscribeOptions(ISubscribeOptionsBuilder builder, bool ordered, string deliverSubject, string deliverGroup) : base(builder, false, ordered, deliverSubject, deliverGroup) { }
// Validation is done by base class private PullSubscribeOptions(ISubscribeOptionsBuilder builder) : base(builder, true, false, null, null) { }