Esempio n. 1
0
        public async Task <Task> StartAsync()
        {
            var builder        = new SubscriberServiceApiClientBuilder();
            var subscriber     = builder.Build();
            var projectId      = "second-impact-574";
            var subscriptionId = "test-subscription";
            var topicId        = "sync_client_commands";

            TopicName        topicName        = new TopicName(projectId, topicId);
            SubscriptionName subscriptionName = new SubscriptionName(projectId, subscriptionId);

            try
            {
                Subscription subscription = subscriber.CreateSubscription(
                    subscriptionName, topicName, pushConfig: null,
                    ackDeadlineSeconds: 60);
            }
            catch (RpcException e)
                when(e.Status.StatusCode == StatusCode.AlreadyExists)
                {
                    Console.Out.WriteLine("subscription already exists...");
                }

            client = await SubscriberClient.CreateAsync(subscriptionName);

            return(client.StartAsync(async(message, token) =>
            {
                await Task.Delay(5 * 1000);
                return Reply.Ack;
            }));
        }
        public override void Dispose()
        {
            var subscriber = new SubscriberServiceApiClientBuilder {
                EmulatorDetection = EmulatorDetection.EmulatorOrProduction
            }.Build();
            var subscriptions = subscriber.ListSubscriptions(new ProjectName(ProjectId))
                                .Where(sub => sub.SubscriptionName.SubscriptionId.StartsWith(SubscriptionPrefix))
                                .ToList();

            foreach (var sub in subscriptions)
            {
                subscriber.DeleteSubscription(sub.SubscriptionName);
            }

            var publisher = new PublisherServiceApiClientBuilder {
                EmulatorDetection = EmulatorDetection.EmulatorOrProduction
            }.Build();
            var topics = publisher.ListTopics(new ProjectName(ProjectId))
                         .Where(topic => topic.TopicName.TopicId.StartsWith(TopicPrefix))
                         .ToList();

            foreach (var topic in topics)
            {
                publisher.DeleteTopic(topic.TopicName);
            }
        }
Esempio n. 3
0
 public void ClientBuilderSupport()
 {
     // Sample: ClientBuilderSupport
     SubscriberServiceApiClient client = new SubscriberServiceApiClientBuilder
     {
         EmulatorDetection = EmulatorDetection.EmulatorOrProduction
     }.Build();
     // End sample
 }
 public void Emulator()
 {
     // Sample: Emulator
     SubscriberServiceApiClient subscriber = new SubscriberServiceApiClientBuilder
     {
         EmulatorDetection = EmulatorDetection.EmulatorOrProduction
     }.Build();
     // End sample
 }
Esempio n. 5
0
        private SubscriberServiceApiClient CreateSubscriber()
        {
            var subscriberBuilder = new SubscriberServiceApiClientBuilder();

            subscriberBuilder.ChannelCredentials = ChannelCredentials.Insecure;
            subscriberBuilder.Endpoint           = Environment.GetEnvironmentVariable("PUBSUB_EMULATOR_HOST");
            var subscriber = subscriberBuilder.Build();

            return(subscriber);
        }
Esempio n. 6
0
        // note: do not call dispose on this for now, it's a "fake" disposable
        public IDisposable Subscribe(IObserver <IDeliveryContext> observer)
        {
            SubscriberServiceApiClient subscriberService = new SubscriberServiceApiClientBuilder
            {
                Endpoint           = ConnectionUrl,
                ChannelCredentials = ChannelCredentials.Insecure
            }.Build();

            SubscriptionName subscriptionName = new SubscriptionName(ProjectId, QueueName);

            try
            {
                var subscription = subscriberService.CreateSubscription(QueueName, ExchangeName, pushConfig: null, ackDeadlineSeconds: 60);
            }
            catch
            {
                //already exists
            }

            var subscriber = SubscriberClient.CreateAsync(subscriptionName,
                                                          new SubscriberClient.ClientCreationSettings(null, null, ChannelCredentials.Insecure, ConnectionUrl))
                             .ConfigureAwait(false).GetAwaiter().GetResult();

            var subscriberTask = subscriber.StartAsync(async(msg, cancellationToken) =>
            {
                try
                {
                    if (cancellationToken.IsCancellationRequested)
                    {
                        await subscriber.StopAsync(cancellationToken);
                        observer.OnCompleted();
                        cancellationToken.ThrowIfCancellationRequested();
                    }

                    var context = new DeliveryContext(msg, subscriber);

                    //TODO: mutation not working
                    observer.OnNext(context);

                    // Return Reply.Ack to indicate this message has been handled.
                    return(context.Reply);
                }
                catch (Exception ex)
                {
                    observer.OnError(ex);
                    return(SubscriberClient.Reply.Nack);
                }
            });

            return(null);
        }
Esempio n. 7
0
        public async Task <string> PublishOneAsync <T>(T message, string withSubscriptionId = null, CancellationToken cancellationToken = default)
        {
            //PublisherServiceApiClient publisherService = await PublisherServiceApiClient.CreateAsync
            PublisherServiceApiClient publisherService = new PublisherServiceApiClientBuilder
            {
                Endpoint           = endpoint,
                ChannelCredentials = ChannelCredentials.Insecure
            }.Build();

            TopicName topicName = new TopicName(projectId, topicId);

            try
            {
                publisherService.CreateTopic(topicName, CallSettings.FromCancellationToken(cancellationToken));
            }
            catch
            {
                //already exists
            }

            if (!string.IsNullOrWhiteSpace(withSubscriptionId))
            {
                //SubscriberServiceApiClient subscriberService = await SubscriberServiceApiClient.CreateAsync();
                SubscriberServiceApiClient subscriberService = new SubscriberServiceApiClientBuilder
                {
                    Endpoint           = endpoint,
                    ChannelCredentials = ChannelCredentials.Insecure
                }.Build();

                SubscriptionName subscriptionName = new SubscriptionName(projectId, withSubscriptionId);

                try
                {
                    subscriberService.CreateSubscription(subscriptionName, topicName, pushConfig: null, ackDeadlineSeconds: 60);
                }
                catch
                {
                    //already exists
                }
            }

            return(await PublishAsync(topicName, endpoint, message));
        }