示例#1
0
        public Task <ISubscriber> CreateSubscriber(string topicName, string subscriptionName, Func <ISubscriber, IEnumerable <Message>, Task> messagesHandler,
                                                   SubscriberOptions options = null)
        {
            if (messagesHandler == null)
            {
                throw new ArgumentNullException(nameof(messagesHandler));
            }

            return(CreateSubscriberInternal(topicName, subscriptionName, options, duplexStream => new Subscriber(duplexStream, messagesHandler)));
        }
示例#2
0
        private async Task <ISubscriber> CreateSubscriberInternal(string topicName, string subscriptionName, SubscriberOptions options,
                                                                  Func <AsyncDuplexStreamingCall <FastQueueService.CompleteRequest, FastQueueService.MessageBatch>, Subscriber> subscriberFactory)
        {
            var opt          = options ?? new SubscriberOptions();
            var duplexStream = grpcClient.Subscribe();
            await duplexStream.RequestStream.WriteAsync(new FastQueueService.CompleteRequest
            {
                Options = new FastQueueService.SubscriberOptions
                {
                    TopicName                = topicName,
                    SubscriptionName         = subscriptionName,
                    MaxMessagesInBatch       = opt.MaxMessagesInBatch,
                    PushIntervalMilliseconds = opt.PushIntervalMilliseconds
                }
            });

            var subscriber = subscriberFactory(duplexStream);

            subscriber.StartReceivingLoop();
            return(subscriber);
        }
示例#3
0
 public SubscriberOptions(SubscriberOptions options)
 {
     PushIntervalMilliseconds = options.PushIntervalMilliseconds;
     MaxMessagesInBatch       = options.MaxMessagesInBatch;
 }