public void CreateSubscription_RequestObject() { // Snippet: CreateSubscription(Subscription,CallSettings) // Create client SubscriberClient subscriberClient = SubscriberClient.Create(); // Initialize request argument(s) Subscription request = new Subscription { SubscriptionName = new SubscriptionName("[PROJECT]", "[SUBSCRIPTION]"), TopicAsTopicNameOneof = TopicNameOneof.From(new TopicName("[PROJECT]", "[TOPIC]")), }; // Make the request Subscription response = subscriberClient.CreateSubscription(request); // End snippet }
static int Main(string[] args) { if (args.Length != 3) { Console.WriteLine("Call with three args: <emulator port> <input file> <output file>"); Console.WriteLine("This connects to host 127.0.0.1, so requires the emulator to be started using ipv4, not ipv6:"); Console.WriteLine(" E.g. cloud-pubsub-emulator.bat --host=127.0.0.1 --port=8700"); Console.WriteLine("It reads and writes CSV files as specified in the 'Testing Ordering Keys' section of the"); Console.WriteLine(" 'Pub/Sub Ordering Key Client Libraries' doc."); Console.WriteLine(); return(1); } // Read inputs. var port = int.Parse(args[0]); var inputLines = File.ReadAllLines(args[1]).Select(line => new InputLine(line)).ToList(); // Setup gRPC channel to pubsub emulator. var channel = new Channel("127.0.0.1", port, ChannelCredentials.Insecure); // Create topic and subscription names. var topicName = new TopicName("project", $"topic-{Guid.NewGuid()}"); var subscriptionName = new SubscriptionName("project", $"subscription-{Guid.NewGuid()}"); // List that records all received messages. var recvMsgs = new List <PubsubMessage>(); // Run test. CreateTopicAndSubscription(); Task subTask = Subscribe(); IEnumerable <Task> pubTasks = Publish(); // Wait for publish and subscribe tasks to complete. Console.WriteLine("Waiting for all publish tasks to complete"); Task.WaitAll(pubTasks.ToArray()); Console.WriteLine("All publish tasks completed"); Console.WriteLine("Waiting for subscribe task to complete"); subTask.Wait(); Console.WriteLine("Subscribe task completed"); // Output ordered CSV file of recevied messages, for the validator. var csvLines = recvMsgs.Select(x => $"\"{x.OrderingKey}\",\"{x.Data.ToStringUtf8()}\"").ToList(); File.WriteAllLines(args[2], csvLines); Console.WriteLine("Output file written; all done :)"); return(0); void CreateTopicAndSubscription() { Console.WriteLine("Creating topic and subscription"); var pubApi = PublisherServiceApiClient.Create(channel); var topic = pubApi.CreateTopic(topicName); var subApi = SubscriberServiceApiClient.Create(channel); subApi.CreateSubscription(new Subscription { EnableMessageOrdering = true, TopicAsTopicNameOneof = TopicNameOneof.From(topicName), SubscriptionName = subscriptionName, AckDeadlineSeconds = 120, }); } Task Subscribe() { Console.WriteLine("Creating subscribers"); var subs = new[] { SubscriberServiceApiClient.Create(channel), SubscriberServiceApiClient.Create(channel), SubscriberServiceApiClient.Create(channel) }; var sub = new SubscriberClientImpl(subscriptionName, subs, new SubscriberClient.Settings(), null); var recvCount = 0; var rnd = new Random(); Console.WriteLine("Starting subscriber callback"); return(sub.StartAsync(async(msg, ct) => { lock (recvMsgs) { recvMsgs.Add(msg.Clone()); recvCount += 1; if (recvCount == inputLines.Count) { Console.WriteLine("Received all messages, shutting down"); var dummyTask = sub.StopAsync(CancellationToken.None); } } if (rnd.Next(3) == 0) { await Task.Delay(rnd.Next(3)); } return SubscriberClient.Reply.Ack; })); } IEnumerable <Task> Publish() { Console.WriteLine("Creating publishers"); var pubs = new[] { PublisherServiceApiClient.Create(channel), PublisherServiceApiClient.Create(channel), PublisherServiceApiClient.Create(channel) }; var pub = new PublisherClientImpl(topicName, pubs, new PublisherClient.Settings { EnableMessageOrdering = true }, null); var publishTasks = new List <Task>(); Console.WriteLine("Starting to publish"); foreach (var inputLine in inputLines) { var pubTask = pub.PublishAsync(inputLine.OrderingKey, inputLine.Message); publishTasks.Add(pubTask); } Console.WriteLine("Publishing complete"); return(publishTasks); } }