Esempio n. 1
0
        static async Task Main(string[] args)
        {
            using var actorSystem = ActorSystem.Create("poc");
            using var mat         = actorSystem.Materializer();

            var connectionSettings = AmqpConnectionDetails.Create("localhost", 5672)
                                     .WithCredentials(AmqpCredentials.Create("mirero", "system"))
                                     .WithAutomaticRecoveryEnabled(true)
                                     .WithNetworkRecoveryInterval(TimeSpan.FromSeconds(1));

            var queueName = "Amqp_Test_1";

            var queueDeclation = QueueDeclaration.Create(queueName)
                                 .WithDurable(false)
                                 .WithAutoDelete(true);

            var amqpSink = AmqpSink.CreateSimple(AmqpSinkSettings.Create(connectionSettings)
                                                 .WithRoutingKey(queueName)
                                                 .WithDeclarations(queueDeclation));

            var amqpSource = AmqpSource.CommittableSource(NamedQueueSourceSettings.Create(connectionSettings, queueName)
                                                          .WithDeclarations(queueDeclation), 1);

            var input = new[] { "one", "two", "three", "four", "five" };

            await Source.From(input)
            .Select(ByteString.FromString)
            .RunWith(amqpSink, mat);

            await actorSystem.Terminate();
        }
Esempio n. 2
0
        public void Not_republish_message_without_autoAck_false_if_nack_is_sent()
        {
            var queueName        = "amqp-conn-it-spec-simple-queue-" + Environment.TickCount;
            var queueDeclaration = QueueDeclaration.Create(queueName);
            var amqpSink         = AmqpSink.CreateSimple(AmqpSinkSettings.Create(_connectionSettings).WithRoutingKey(queueName).WithDeclarations(queueDeclaration));
            var input            = new[] { "one", "two", "three", "four", "five" };

            Source.From(input).Select(ByteString.FromString).RunWith(amqpSink, _mat).Wait();

            var amqpSource = AmqpSource.CommittableSource(
                NamedQueueSourceSettings.Create(_connectionSettings, queueName).WithDeclarations(queueDeclaration), bufferSize: 10);

            var result1 = amqpSource
                          .SelectAsync(1, async cm =>
            {
                await cm.Nack(requeue: false);
                return(cm);
            })
                          .Take(input.Length)
                          .RunWith(Sink.Seq <CommittableIncomingMessage>(), _mat);

            result1.Wait(TimeSpan.FromSeconds(3)).Should().BeTrue();

            var result2 = amqpSource
                          .SelectAsync(1, async cm =>
            {
                await cm.Ack();
                return(cm);
            })
                          .Take(input.Length)
                          .RunWith(Sink.Seq <CommittableIncomingMessage>(), _mat);

            result2.Wait(TimeSpan.FromSeconds(1)).Should().BeFalse();
        }
Esempio n. 3
0
        public void Publish_and_consume_elements_through_a_simple_queue_again_in_the_same_process_without_autoAck()
        {
            var queueName        = "amqp-conn-it-spec-simple-queue-" + Environment.TickCount;
            var queueDeclaration = QueueDeclaration.Create(queueName);
            var amqpSink         = AmqpSink.CreateSimple(AmqpSinkSettings.Create(_connectionSettings).WithRoutingKey(queueName).WithDeclarations(queueDeclaration));

            //#create-source-withoutautoack
            var amqpSource = AmqpSource.CommittableSource(
                NamedQueueSourceSettings.Create(_connectionSettings, queueName).WithDeclarations(queueDeclaration),
                bufferSize: 10);

            //#create-source-withoutautoack

            var input = new[] { "one", "two", "three", "four", "five" };

            Source.From(input).Select(ByteString.FromString).RunWith(amqpSink, _mat).Wait();

            //#run-source-withoutautoack
            var result = amqpSource
                         .SelectAsync(1, async cm =>
            {
                await cm.Ack();
                return(cm);
            })
                         .Take(input.Length)
                         .RunWith(Sink.Seq <CommittableIncomingMessage>(), _mat);

            //#run-source-withoutautoack
            result.Result.Select(x => x.Message.Bytes.ToString()).Should().Equal(input);
        }
Esempio n. 4
0
        public static Source <CommittableIncomingMessage, Akka.NotUsed> CommittableQueue(Action <SimpleQueueOptions> opt)
        {
            var option = new SimpleQueueOptions();

            opt.Invoke(option);

            var connectionSettings = AmqpConnectionDetails.Create(option.HostAndPorts.First().Host, option.HostAndPorts.First().Port)
                                     .WithHostsAndPorts(option.HostAndPorts.First(), option.HostAndPorts.ToArray())
                                     .WithCredentials(AmqpCredentials.Create(option.UserName, option.Password))
                                     .WithAutomaticRecoveryEnabled(true)
                                     .WithNetworkRecoveryInterval(TimeSpan.FromSeconds(1))
                                     .WithVirtualHost(option.VirtualHost);

            var queueDeclaration = QueueDeclaration.Create(option.QueueName)
                                   .WithDurable(false)
                                   .WithAutoDelete(false);

            return(AmqpSource.CommittableSource(NamedQueueSourceSettings.Create(connectionSettings, option.QueueName)
                                                .WithDeclarations(queueDeclaration), 1));
        }
Esempio n. 5
0
        public void Keep_connection_open_if_downstream_closes_and_there_are_pending_acks()
        {
            var queueName        = "amqp-conn-it-spec-simple-queue-" + Environment.TickCount;
            var queueDeclaration = QueueDeclaration.Create(queueName);

            var amqpSink = AmqpSink.CreateSimple(AmqpSinkSettings.Create(_connectionSettings).WithRoutingKey(queueName).WithDeclarations(queueDeclaration));

            var amqpSource = AmqpSource.CommittableSource(
                NamedQueueSourceSettings.Create(_connectionSettings, queueName).WithDeclarations(queueDeclaration), bufferSize: 10);

            var input = new[] { "one", "two", "three", "four", "five" };

            Source.From(input).Select(ByteString.FromString).RunWith(amqpSink, _mat).Wait();
            var result = amqpSource.Take(input.Length).RunWith(Sink.Seq <CommittableIncomingMessage>(), _mat);

            foreach (var cm in result.Result)
            {
                cm.Ack().Wait();
            }
        }
Esempio n. 6
0
        public void Declare_connection_that_does_not_require_server_acks()
        {
            //var connectionSettings = AmqpConnectionDetails.Create("localhost", 5672);

            var queueName        = "amqp-conn-it-spec-fire-and-forget-" + Environment.TickCount;
            var queueDeclaration = QueueDeclaration.Create(queueName);

            var amqpSink = AmqpSink.CreateSimple(AmqpSinkSettings.Create(_connectionSettings)
                                                 .WithRoutingKey(queueName)
                                                 .WithDeclarations(queueDeclaration));

            var amqpSource = AmqpSource.CommittableSource(NamedQueueSourceSettings.Create(_connectionSettings, queueName)
                                                          .WithAckRequired(false)
                                                          .WithDeclarations(queueDeclaration), bufferSize: 10);

            var input = new[] { "one", "two", "three", "four", "five" };

            Source.From(input).Select(ByteString.FromString).RunWith(amqpSink, _mat).Wait();

            var result = amqpSource.Take(input.Length).RunWith(Sink.Seq <CommittableIncomingMessage>(), _mat).Result;

            result.Select(x => x.Message.Bytes.ToString(Encoding.UTF8)).Should().Equal(input);
        }