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))); }
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); }
public SubscriberOptions(SubscriberOptions options) { PushIntervalMilliseconds = options.PushIntervalMilliseconds; MaxMessagesInBatch = options.MaxMessagesInBatch; }