public void TestBindPull() { Context.RunInJsServer(c => { CreateDefaultTestStream(c); IJetStream js = c.CreateJetStreamContext(); JsPublish(js, SUBJECT, 1, 1); PullSubscribeOptions pso = PullSubscribeOptions.Builder() .WithDurable(DURABLE) .Build(); IJetStreamPullSubscription s = js.PullSubscribe(SUBJECT, pso); s.Pull(1); Msg m = s.NextMessage(1000); Assert.NotNull(m); Assert.Equal(Data(1), Encoding.ASCII.GetString(m.Data)); m.Ack(); s.Unsubscribe(); JsPublish(js, SUBJECT, 2, 1); pso = PullSubscribeOptions.Builder() .WithStream(STREAM) .WithDurable(DURABLE) .WithBind(true) .Build(); s = js.PullSubscribe(SUBJECT, pso); s.Pull(1); m = s.NextMessage(1000); Assert.NotNull(m); Assert.Equal(Data(2), Encoding.ASCII.GetString(m.Data)); m.Ack(); s.Unsubscribe(); JsPublish(js, SUBJECT, 3, 1); pso = PullSubscribeOptions.BindTo(STREAM, DURABLE); s = js.PullSubscribe(SUBJECT, pso); s.Pull(1); m = s.NextMessage(1000); Assert.NotNull(m); Assert.Equal(Data(3), Encoding.ASCII.GetString(m.Data)); }); }
public void TestBindDurableDeliverSubject() { Context.RunInJsServer(c => { CreateDefaultTestStream(c); IJetStream js = c.CreateJetStreamContext(); IJetStreamManagement jsm = c.CreateJetStreamManagementContext(); // create a durable push subscriber - has deliver subject ConsumerConfiguration ccDurPush = ConsumerConfiguration.Builder() .WithDurable(Durable(1)) .WithDeliverSubject(Deliver(1)) .Build(); jsm.AddOrUpdateConsumer(STREAM, ccDurPush); // create a durable pull subscriber - notice no deliver subject ConsumerConfiguration ccDurPull = ConsumerConfiguration.Builder() .WithDurable(Durable(2)) .Build(); jsm.AddOrUpdateConsumer(STREAM, ccDurPull); // try to pull subscribe against a push durable NATSJetStreamClientException e = Assert.Throws <NATSJetStreamClientException>( () => js.PullSubscribe(SUBJECT, PullSubscribeOptions.Builder().WithDurable(Durable(1)).Build())); Assert.Contains(JsSubConsumerAlreadyConfiguredAsPush.Id, e.Message); // try to pull bind against a push durable e = Assert.Throws <NATSJetStreamClientException>( () => js.PullSubscribe(SUBJECT, PullSubscribeOptions.BindTo(STREAM, Durable(1)))); Assert.Contains(JsSubConsumerAlreadyConfiguredAsPush.Id, e.Message); // this one is okay IJetStreamPullSubscription sub = js.PullSubscribe(SUBJECT, PullSubscribeOptions.Builder().WithDurable(Durable(2)).Build()); sub.Unsubscribe(); // so I can re-use the durable // try to push subscribe against a pull durable e = Assert.Throws <NATSJetStreamClientException>( () => js.PushSubscribeSync(SUBJECT, PushSubscribeOptions.Builder().WithDurable(Durable(2)).Build())); Assert.Contains(JsSubConsumerAlreadyConfiguredAsPull.Id, e.Message); // try to push bind against a pull durable e = Assert.Throws <NATSJetStreamClientException>( () => js.PushSubscribeSync(SUBJECT, PushSubscribeOptions.BindTo(STREAM, Durable(2)))); Assert.Contains(JsSubConsumerAlreadyConfiguredAsPull.Id, e.Message); // this one is okay js.PushSubscribeSync(SUBJECT, PushSubscribeOptions.Builder().WithDurable(Durable(1)).Build()); }); }
private void _testDurable(IJetStream js, PullSubSupplier supplier) { JsPublish(js, SUBJECT, 2); IJetStreamPullSubscription sub = supplier.Invoke(); // start the pull sub.PullNoWait(4); IList <Msg> messages = ReadMessagesAck(sub); ValidateRedAndTotal(2, messages.Count, 2, 2); sub.Unsubscribe(); }