Example #1
0
        public async Task SimplePublish(IFastQueueClient client, string topicName)
        {
            await using var publisher = await client.CreatePublisher(topicName, ack =>
            {
                Console.WriteLine($"(simple) Last persisted SequenceNumber: {ack}");
            });

            for (int i = 0; i < 1000; i++)
            {
                var message        = messageGenerator.CreateMessage().Serialize();
                var sequenceNumber = await publisher.Publish(message);
            }
        }
Example #2
0
        public async Task PublishBatches(IFastQueueClient client, string topicName)
        {
            await using var publisher = await client.CreatePublisherMany(topicName, ack =>
            {
                Console.WriteLine($"(batches) Last persisted SequenceNumber: {ack}");
            });

            for (int i = 0; i < 1000; i++)
            {
                var messages = new ReadOnlyMemory <byte> [10];
                for (int j = 0; j < 10; j++)
                {
                    messages[j] = messageGenerator.CreateMessage().Serialize();
                }

                var sequenceNumber = await publisher.Publish(messages);
            }
        }
Example #3
0
        public async Task PublishAndWaitUntilAllMessagesAreAcknowledged(IFastQueueClient client, string topicName)
        {
            // in the future there will be an extensions for Publisher to do this in a simpler way
            bool waitingForAck = false;
            long lastPublishedSequenceNumber    = 0;
            long lastAcknowledgedSequenceNumber = 0;
            TaskCompletionSource <int> tcs      = null;

            await using var publisher = await client.CreatePublisher(topicName, ack =>
            {
                Console.WriteLine($"(waiting example) Last persisted SequenceNumber: {ack}");

                lastAcknowledgedSequenceNumber = ack;
                if (waitingForAck)
                {
                    if (lastPublishedSequenceNumber == ack)
                    {
                        tcs.TrySetResult(0);
                    }
                }
            });

            for (int i = 0; i < 1000; i++)
            {
                var message = messageGenerator.CreateMessage().Serialize();
                lastPublishedSequenceNumber = await publisher.Publish(message);
            }

            tcs           = new TaskCompletionSource <int>();
            waitingForAck = true;
            if (lastAcknowledgedSequenceNumber != lastPublishedSequenceNumber)
            {
                await tcs.Task;
            }

            Console.WriteLine($"(waiting example) All messages acknowledged");
        }
Example #4
0
 public Task DeleteSubscription(IFastQueueClient client, string topicName, string subscriptionName)
 {
     return(client.DeleteSubscription(topicName, subscriptionName, CancellationToken.None));
 }
Example #5
0
 public Task DeleteTopic(IFastQueueClient client, string topicName)
 {
     return(client.DeleteTopic(topicName, CancellationToken.None));
 }
Example #6
0
 public Task <ISubscriber> CreateSubscriber(IFastQueueClient client, string topicName, string subscriptionName)
 {
     return(client.CreateSubscriber(topicName, subscriptionName, async(sub, ms) =>
     {
         var arr = ms.ToArray();
         Console.WriteLine($"({subscriptionName}) Received: Count {arr.Length}, Range {arr[0].ID} - {arr[^1].ID}, Deserialized IDs {TestMessage.Deserialize(arr[0].Body.Span).ID} - {TestMessage.Deserialize(arr[^1].Body.Span).ID}");