Пример #1
0
        public void TestAckReplySyncCoverage()
        {
            Context.RunInJsServer(c =>
            {
                // create the stream.
                CreateDefaultTestStream(c);

                // Create our JetStream context.
                IJetStream js = c.CreateJetStreamContext();

                IJetStreamPushSyncSubscription sub = js.PushSubscribeSync(SUBJECT);
                c.Flush(DefaultTimeout); // flush outgoing communication with/to the server

                JsPublish(js, SUBJECT, "COVERAGE", 1);

                Msg message = sub.NextMessage(1000);
                Assert.NotNull(message);
                message.Reply = "$JS.ACK.stream.LS0k4eeN.1.1.1.1627472530542070600.0";

                Assert.Throws <NATSNoRespondersException>(() => message.AckSync(1000));
            });
        }
Пример #2
0
        public void TestAcks()
        {
            Context.RunInJsServer(c =>
            {
                // create the stream.
                CreateDefaultTestStream(c);

                // Create our JetStream context.
                IJetStream js = c.CreateJetStreamContext();

                ConsumerConfiguration cc = ConsumerConfiguration.Builder().WithAckWait(1500).Build();

                // Build our subscription options.
                PushSubscribeOptions options = PushSubscribeOptions.Builder()
                                               .WithConfiguration(cc)
                                               .Build();

                IJetStreamPushSyncSubscription sub = js.PushSubscribeSync(SUBJECT, options);
                c.Flush(DefaultTimeout); // flush outgoing communication with/to the server

                // TERM
                JsPublish(js, SUBJECT, "TERM", 1);

                Msg m = sub.NextMessage(DefaultTimeout);
                Assert.NotNull(m);
                Assert.Equal("TERM1", Encoding.ASCII.GetString(m.Data));
                m.Term();

                AssertNoMoreMessages(sub);

                // Ack Wait timeout
                JsPublish(js, SUBJECT, "WAIT", 1);

                m = sub.NextMessage(DefaultTimeout);
                Assert.NotNull(m);
                Assert.Equal("WAIT1", Encoding.ASCII.GetString(m.Data));
                Thread.Sleep(2000);
                m.Ack();

                m = sub.NextMessage(DefaultTimeout);
                Assert.NotNull(m);
                Assert.Equal("WAIT1", Encoding.ASCII.GetString(m.Data));

                // In Progress
                JsPublish(js, SUBJECT, "PRO", 1);

                m = sub.NextMessage(DefaultTimeout);
                Assert.NotNull(m);
                Assert.Equal("PRO1", Encoding.ASCII.GetString(m.Data));
                m.InProgress();
                Thread.Sleep(750);
                m.InProgress();
                Thread.Sleep(750);
                m.InProgress();
                Thread.Sleep(750);
                m.InProgress();
                Thread.Sleep(750);
                m.Ack();

                AssertNoMoreMessages(sub);

                // ACK Sync
                JsPublish(js, SUBJECT, "ACKSYNC", 1);
                m = sub.NextMessage(DefaultTimeout);
                Assert.NotNull(m);
                Assert.Equal("ACKSYNC1", Encoding.ASCII.GetString(m.Data));
                m.AckSync(DefaultTimeout);

                AssertNoMoreMessages(sub);

                // NAK
                JsPublish(js, SUBJECT, "NAK", 1);

                m = sub.NextMessage(DefaultTimeout);
                Assert.NotNull(m);
                Assert.Equal("NAK1", Encoding.ASCII.GetString(m.Data));
                m.Nak();

                m = sub.NextMessage(DefaultTimeout);
                Assert.NotNull(m);
                Assert.Equal("NAK1", Encoding.ASCII.GetString(m.Data));
                m.Ack();

                AssertNoMoreMessages(sub);

                JsPublish(js, SUBJECT, "NAK", 2, 1);

                m = sub.NextMessage(1000);
                Assert.NotNull(m);
                Assert.Equal("NAK2", Encoding.ASCII.GetString(m.Data));
                m.NakWithDelay(3000);

                Assert.Throws <NATSTimeoutException>(() => sub.NextMessage(500));

                m = sub.NextMessage(3000);
                Assert.NotNull(m);
                Assert.Equal("NAK2", Encoding.ASCII.GetString(m.Data));
                m.Ack();

                Assert.Throws <NATSTimeoutException>(() => sub.NextMessage(500));

                JsPublish(js, SUBJECT, "NAK", 3, 1);

                m = sub.NextMessage(1000);
                Assert.NotNull(m);
                Assert.Equal("NAK3", Encoding.ASCII.GetString(m.Data));
                m.NakWithDelay(Duration.OfSeconds(3)); // coverage to use both nakWithDelay

                Assert.Throws <NATSTimeoutException>(() => sub.NextMessage(500));

                m = sub.NextMessage(3000);
                Assert.NotNull(m);
                Assert.Equal("NAK3", Encoding.ASCII.GetString(m.Data));
                m.Ack();

                Assert.Throws <NATSTimeoutException>(() => sub.NextMessage(500));
            });
        }