Esempio n. 1
0
        public async void RequestModelPublisherRemoteProcedureCallTest()
        {
            // Arrange
            var connectionMock        = new Mock <IConnection>();
            var connectionFactoryMock = new Mock <IConnectionFactory>();

            connectionFactoryMock.Setup(cf => cf.CreateConnection()).Returns(connectionMock.Object);
            var rabbitConnection = Sys.ActorOf(RabbitConnection.CreateProps(connectionFactoryMock.Object));

            // Act
            var consumerActorRef = await rabbitConnection.Ask <IActorRef>(Mock.Of <IRequestModelPublisherRemoteProcedureCall>());

            // Assert
            Assert.IsNotNull(consumerActorRef);
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            ConnectionFactory factory = new ConnectionFactory
            {
                UserName    = "******",
                Password    = "******",
                HostName    = "localhost",
                Port        = 5672,
                VirtualHost = "/",
            };

            //const string exchangeName = "amq.topic";
            const string exchangeName = "";
            const string routingKey   = "routingKey";


            var actorSystem = ActorSystem.Create("RabbitAkkaExample");

            var rabbitConnectionActorRef = actorSystem.ActorOf(RabbitConnection.CreateProps(factory));

            var rabbitPublisher = rabbitConnectionActorRef.Ask <IActorRef>(new RequestModelPublisher(true, TimeSpan.FromSeconds(10))).Result;

            var consoleOutputOne = actorSystem.ActorOf(ConsoleOutputActorThatReplies.CreateProps("One", 3000, rabbitPublisher));
            var consoleOutputTwo = actorSystem.ActorOf(ConsoleOutputActorThatReplies.CreateProps("Two", 6000, rabbitPublisher));

            var rabbitModelOne = rabbitConnectionActorRef.Ask <IActorRef>(new RequestModelConsumerWithConcurrencyControl(
                                                                              exchangeName,
                                                                              "xxx",//"one",
                                                                              routingKey,
                                                                              1,
                                                                              consoleOutputOne)).Result;

            var rabbitModelTwo = rabbitConnectionActorRef.Ask <IActorRef>(new RequestModelConsumerWithConcurrencyControl(
                                                                              exchangeName,
                                                                              "xxx", //"two",
                                                                              routingKey,
                                                                              3,
                                                                              consoleOutputTwo)).Result;

            Task.WaitAll(rabbitModelOne.Ask <bool>("start"),
                         rabbitModelTwo.Ask <bool>("start"));

            Console.ReadLine();
        }
Esempio n. 3
0
        static void Main(string[] args)
        {
            //Thread.Sleep(TimeSpan.FromHours(1));
            ConnectionFactory factory = new ConnectionFactory
            {
                UserName    = "******",
                Password    = "******",
                HostName    = "localhost",
                Port        = 5672,
                VirtualHost = "/",
            };

            //const string exchangeName = "amq.topic";
            const string exchangeName = "";
            const string routingKey   = "routingKey";


            var actorSystem = ActorSystem.Create("RabbitAkkaExample");

            var rabbitConnectionActorRef = actorSystem.ActorOf(RabbitConnection.CreateProps(factory));

            var requestModelPublisherActorRef =
                rabbitConnectionActorRef.Ask <IActorRef>(new RequestModelPublisher(true, TimeSpan.FromSeconds(10))).Result;

            var consoleOutputActorRef = actorSystem.ActorOf(ConsoleOutputActor.CreateProps());

            var requestModelPublisherRemoteProcedureCallActorRef =
                rabbitConnectionActorRef.Ask <IActorRef>(new RequestModelPublisherRemoteProcedureCall(exchangeName, routingKey, consoleOutputActorRef)).Result;

            string input = null;

            do
            {
                Task <bool> publishTask = null;
                if (input?.StartsWith("?", StringComparison.CurrentCultureIgnoreCase) == true)
                {
                    if (string.IsNullOrEmpty(exchangeName))
                    {
                        publishTask = requestModelPublisherRemoteProcedureCallActorRef.Ask <Task <bool> >(new PublishMessageToQueue(
                                                                                                              "xxx",
                                                                                                              Encoding.ASCII.GetBytes(input.Substring(1)))).Result;
                    }
                    else
                    {
                        publishTask = requestModelPublisherRemoteProcedureCallActorRef.Ask <Task <bool> >(new PublishMessageUsingRoutingKey(
                                                                                                              exchangeName, routingKey, Encoding.ASCII.GetBytes(input.Substring(1)))).Result;
                    }
                }
                else if (input != null)
                {
                    if (string.IsNullOrEmpty(exchangeName))
                    {
                        publishTask = requestModelPublisherActorRef.Ask <Task <bool> >(new PublishMessageToQueue("xxx",
                                                                                                                 Encoding.ASCII.GetBytes(input))).Result;
                    }
                    else
                    {
                        publishTask = requestModelPublisherActorRef.Ask <Task <bool> >(new PublishMessageUsingRoutingKey(exchangeName, routingKey,
                                                                                                                         Encoding.ASCII.GetBytes(input))).Result;
                    }
                }

                if (publishTask != null)
                {
                    var messageInput = input;
                    publishTask.ContinueWith(_ => Console.WriteLine($"Published {messageInput}"),
                                             TaskContinuationOptions.OnlyOnRanToCompletion | TaskContinuationOptions.AttachedToParent);
                    publishTask.ContinueWith(_ => Console.WriteLine($"Could not publish {messageInput}"),
                                             TaskContinuationOptions.OnlyOnFaulted | TaskContinuationOptions.AttachedToParent);
                }
                Console.WriteLine("type message to send, prefix with [?] for rpc (enter [q] to exit)");
                input = Console.ReadLine();
            } while (!"q".Equals(input, StringComparison.CurrentCultureIgnoreCase));

            Task.WaitAll(actorSystem.Terminate());
        }