/// <summary>
 /// Initializes a new instance.
 /// </summary>
 /// <param name="plan">The plan.</param>
 /// <param name="factory">The factory.</param>
 public ConsumerBase(
     ConsumerPlan plan,
     Func <ConsumerMetadata, T> factory)
 {
     _plan    = plan;
     _factory = factory;
 }
Пример #2
0
        /// <summary>
        /// Subscribe consumer.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="factory">The factory.</param>
        /// <param name="consumerGroup">
        /// Consumer Group allow a group of clients to cooperate
        /// consuming a different portion of the same stream of messages
        /// </param>
        /// <param name="consumerName">
        /// Optional Name of the consumer.
        /// Can use for observability.
        /// </param>
        /// <returns>
        /// The partition subscription (dispose to remove the subscription)
        /// </returns>
        IConsumerLifetime IConsumerSubscribeBuilder.Subscribe <T>(
            Func <ConsumerMetadata, T> factory,
            string?consumerGroup,
            string?consumerName)

        {
            #region Validation

            if (_plan == null)
            {
                throw new ArgumentNullException(nameof(_plan));
            }

            #endregion // Validation

            consumerGroup = consumerGroup ?? $"{DateTime.UtcNow:yyyy-MM-dd HH_mm} {Guid.NewGuid():N}";

            ConsumerPlan plan = _plan.WithConsumerGroup(consumerGroup, consumerName);
            if (plan.SegmentationStrategies.Count == 0)
            {
                plan = plan.AddSegmentation(new ConsumerDefaultSegmentationStrategy());
            }

            var consumer     = new ConsumerBase <T>(plan, factory);
            var subscription = consumer.Subscribe();
            return(subscription);
        }
Пример #3
0
 /// <summary>
 /// Initializes a new instance.
 /// </summary>
 /// <param name="copyFrom">The copy from.</param>
 /// <param name="channel">The channel.</param>
 /// <param name="partition">The partition.</param>
 /// <param name="shard">The shard.</param>
 /// <param name="logger">The logger.</param>
 /// <param name="options">The options.</param>
 /// <param name="segmentationStrategies">The segmentation strategies.</param>
 /// <param name="interceptors">The interceptors.</param>
 /// <param name="routes">The routes.</param>
 /// <param name="cancellation">The cancellation token.</param>
 /// <param name="consumerGroup">Consumer Group allow a group of clients to cooperate
 /// consuming a different portion of the same stream of messages</param>
 /// <param name="consumerName">Optional Name of the consumer.
 /// Can use for observability.</param>
 /// <param name="resiliencePolicy">The resilience policy.</param>
 private ConsumerPlan(
     ConsumerPlan copyFrom,
     IConsumerChannelProvider?channel = null,
     string?partition = null,
     string?shard     = null,
     ILogger?logger   = null,
     IEventSourceConsumerOptions?options = null,
     IImmutableList <IConsumerAsyncSegmentationStrategy>?segmentationStrategies = null,
     IImmutableList <IConsumerAsyncInterceptor>?interceptors = null,
     IImmutableList <IConsumerHooksBuilder>?routes           = null,
     CancellationToken?cancellation = null,
     string?consumerGroup           = null,
     string?consumerName            = null,
     AsyncPolicy?resiliencePolicy   = null)
 {
     Channel   = channel ?? copyFrom.Channel;
     Partition = partition ?? copyFrom.Partition;
     Shard     = shard ?? copyFrom.Shard;
     Logger    = logger ?? copyFrom.Logger;
     Options   = options ?? copyFrom.Options;
     SegmentationStrategies = segmentationStrategies ?? copyFrom.SegmentationStrategies;
     Interceptors           = interceptors ?? copyFrom.Interceptors;
     Routes           = routes ?? copyFrom.Routes;
     Cancellation     = cancellation ?? copyFrom.Cancellation;
     ConsumerGroup    = consumerGroup ?? copyFrom.ConsumerGroup;
     ConsumerName     = consumerName ?? copyFrom.ConsumerName;
     ResiliencePolicy = resiliencePolicy ?? copyFrom.ResiliencePolicy;
 }
Пример #4
0
 /// <summary>
 /// Initializes a new instance.
 /// </summary>
 /// <param name="plan">The plan.</param>
 private ConsumerBuilder(ConsumerPlan plan)
 {
     _plan = plan;
 }