예제 #1
0
        public void SendActorMessageToServiceBusTopic()
        {
            string TopicName = "test-" + "SendActorMessageToServiceBusTopic".ToLower();

            // we cannot send messages to topics that have no subscriptions in them
            var proc = this.StartProcessing(TopicName, "test");

            try
            {
                string        message = "HelloWorld";
                PingPong.Ping aMsg    = new PingPong.Ping(message);
                IActorMessageSerializationActor serializer = new IActorMessageSerializationActor();
                Telegraph.Instance.Register <PingPong.Ping, SendMessageToServiceBusTopic <PingPong.Ping> >(() => new SendMessageToServiceBusTopic <PingPong.Ping>(Connections.ServiceBusConnectionString, TopicName, true));
                Telegraph.Instance.Register <SerializeMessage <IActorMessage>, IActorMessageSerializationActor>(() => serializer);
                IActorMessageDeserializationActor deserializer = new IActorMessageDeserializationActor();
                deserializer.Register <PingPong.Ping>((object msg) => (PingPong.Ping)msg);

                if (!Telegraph.Instance.Ask(aMsg).Wait(new TimeSpan(0, 0, 10)))
                {
                    Assert.Fail("Waited too long to send a message");
                }
                ServiceBusReceivedMessage sbMessage = null;
                WaitForQueue(sbMsgQueue, out sbMessage);
                DeserializeMessage <IActorMessage> dMsg = new DeserializeMessage <IActorMessage>(sbMessage.Body.ToArray());
                deserializer.Ask(dMsg);
                var retMsgs = (PingPong.Ping)dMsg.ProcessingResult;
                Assert.IsTrue(((string)retMsgs.Message).Equals(message));
            }
            finally
            {
                proc.StopProcessingAsync().Wait();
                Telegraph.Instance.UnRegisterAll();
                DeleteServiceBusTopic(TopicName);
            }
        }
예제 #2
0
        public void SendActorMessageToStorageQueue()
        {
            string queueName = "test-" + "SendActorMessageToStorageQueue".ToLower();
            var    queue     = GetStorageQueue(queueName);

            try
            {
                string        message = "HelloWorld";
                PingPong.Ping aMsg    = new PingPong.Ping(message);
                IActorMessageSerializationActor serializer = new IActorMessageSerializationActor();
                Telegraph.Instance.Register <PingPong.Ping, SendMessageToStorageQueue <PingPong.Ping> >(() => new SendMessageToStorageQueue <PingPong.Ping>(Connections.StorageConnectionString, queueName, true));
                Telegraph.Instance.Register <SerializeMessage <IActorMessage>, IActorMessageSerializationActor>(() => serializer);

                if (!Telegraph.Instance.Ask(aMsg).Wait(new TimeSpan(0, 10, 0)))
                {
                    Assert.Fail("Waited too long to send a message");
                }

                IActorMessageDeserializationActor deserializer = new IActorMessageDeserializationActor();
                deserializer.Register <PingPong.Ping>((object msg) => (PingPong.Ping)msg);
                var base64String = queue.ReceiveMessage().Value.Body.ToString();
                var messageBytes = Convert.FromBase64String(base64String);
                DeserializeMessage <IActorMessage> dMsg = new DeserializeMessage <IActorMessage>(messageBytes);
                deserializer.Ask(dMsg);
                var retMsgs = (PingPong.Ping)dMsg.ProcessingResult;
                Assert.IsTrue(((string)retMsgs.Message).Equals(message));
            }
            finally
            {
                Telegraph.Instance.UnRegisterAll();
                GetStorageQueue(queueName).DeleteAsync();
                GetStorageQueue(queueName + "-deadletter").DeleteAsync();
            }
        }
예제 #3
0
        public void RecieveActorMessageFromServiceBusTopic()
        {
            string subscription = "firstsubscription";
            string TopicName    = "test-" + "RecieveActorMessageFromServiceBusTopic".ToLower();
            var    Topic        = GetServiceBusTopicSender(TopicName);

            try
            {
                CreateTopicAndSubscriptions(TopicName, new string[] { subscription });

                string message      = "HelloWorld";
                var    actorMessage = new PingPong.Ping(message);
                SerializeMessage <IActorMessage> sMsg       = new SerializeMessage <IActorMessage>(actorMessage);
                IActorMessageSerializationActor  serializer = new IActorMessageSerializationActor();
                serializer.OnMessageRecieved(sMsg);
                byte[] msgBytes = (byte[])sMsg.ProcessingResult;
                Topic.SendMessageAsync(new ServiceBusMessage(msgBytes));

                long azureOperatorID = Telegraph.Instance.Register(
                    new ServiceBusTopicSubscriptionOperator <IActorMessage>(LocalConcurrencyType.DedicatedThreadCount, Connections.ServiceBusConnectionString, TopicName, subscription, false),
                    (PingPong.Ping foo) => { Assert.IsTrue(message.Equals((string)foo.Message, StringComparison.InvariantCulture)); });
            }
            finally
            {
                Telegraph.Instance.UnRegisterAll();
                DeleteServiceBusTopic(TopicName);
            }
        }
예제 #4
0
        public void SendActorMessageToDirectoryQueue()
        {
            string queueName = "test-" + "SendActorMessageToStorageQueue".ToLower();

            using (var queue = GetDirectoryQueue(queueName))
            {
                try
                {
                    string        message = "HelloWorld";
                    PingPong.Ping aMsg    = new PingPong.Ping(message);
                    IActorMessageSerializationActor serializer = new IActorMessageSerializationActor();
                    var sendMessageQueue = new SendMessageToDirectoryQueue <PingPong.Ping>(queueRootPath, queueName, true);
                    Telegraph.Instance.Register <PingPong.Ping, SendMessageToDirectoryQueue <PingPong.Ping> >(() => sendMessageQueue);
                    Telegraph.Instance.Register <SerializeMessage <IActorMessage>, IActorMessageSerializationActor>(() => serializer);

                    if (!Telegraph.Instance.Ask(aMsg).Wait(new TimeSpan(0, 0, 10)))
                    {
                        Assert.Fail("Waited too long to send a message");
                    }

                    IActorMessageDeserializationActor deserializer = new IActorMessageDeserializationActor();
                    deserializer.Register <PingPong.Ping>((object msg) => (PingPong.Ping)msg);
                    DeserializeMessage <IActorMessage> dMsg = new DeserializeMessage <IActorMessage>(queue.GetMessage().AsBytes);
                    deserializer.Ask(dMsg);
                    var retMsgs = (PingPong.Ping)dMsg.ProcessingResult;
                    Assert.IsTrue(((string)retMsgs.Message).Equals(message));
                }
                finally
                {
                    Telegraph.Instance.UnRegisterAll();
                    queue.Delete();
                    GetDirectoryQueue(queueName + "-deadletter").Delete();
                }
            }
        }
예제 #5
0
        public void RecieveActorMessageFromServiceBusQueue()
        {
            string queueName = "test-" + "RecieveActorMessageFromServiceBusQueue".ToLower();

            try
            {
                this.StartProcessing(queueName);
                var    sender       = GetServiceBusQueueSender(queueName);
                string message      = "HelloWorld";
                var    actorMessage = new PingPong.Ping(message);
                SerializeMessage <IActorMessage> sMsg       = new SerializeMessage <IActorMessage>(actorMessage);
                IActorMessageSerializationActor  serializer = new IActorMessageSerializationActor();
                serializer.OnMessageRecieved(sMsg);
                byte[] msgBytes = (byte[])sMsg.ProcessingResult;
                sender.SendMessageAsync(new ServiceBusMessage(msgBytes));

                long azureOperatorID = Telegraph.Instance.Register(
                    new ServiceBusQueueSubscriptionOperator <IActorMessage>(LocalConcurrencyType.DedicatedThreadCount, Connections.ServiceBusConnectionString, queueName, false, 2),
                    (PingPong.Ping foo) => { Assert.IsTrue(message.Equals((string)foo.Message, StringComparison.InvariantCulture)); });
            }
            finally
            {
                Telegraph.Instance.UnRegisterAll();
                DeleteServiceBusQueue(queueName);
            }
        }
예제 #6
0
        public void RecieveActorMessageFromEventHub()
        {
            string eventHubName  = "test-" + "RecieveActorMessageFromEventHub".ToLower();
            string consumerGroup = eventHubName + Guid.NewGuid().ToString().Substring(0, 6);

            CreateEventHub(eventHubName, consumerGroup);
            var client = new EventHubProducerClient(Connections.EventHubConnectionString, eventHubName);

            try
            {
                string message      = "HelloWorld";
                var    actorMessage = new PingPong.Ping(message);
                SerializeMessage <IActorMessage> sMsg       = new SerializeMessage <IActorMessage>(actorMessage);
                IActorMessageSerializationActor  serializer = new IActorMessageSerializationActor();
                serializer.OnMessageRecieved(sMsg);
                byte[] msgBytes = (byte[])sMsg.ProcessingResult;

                using (var eventBatch = client.CreateBatchAsync().Result)
                {
                    eventBatch.TryAdd(new EventData(msgBytes));
                    client.SendAsync(eventBatch).Wait();
                }

                long azureOperatorID = Telegraph.Instance.Register(
                    new EventHubSubscriptionOperator <IActorMessage>(Connections.EventHubConnectionString, eventHubName, false),
                    (PingPong.Ping foo) => { Assert.IsTrue(message.Equals((string)foo.Message, StringComparison.InvariantCulture)); });
            }
            finally
            {
                Telegraph.Instance.UnRegisterAll();
                DeleteEventHub(eventHubName);
            }
        }
예제 #7
0
        public void SendActorMessageToEventHub()
        {
            string eventHubName  = "test-" + "SendActorMessageToEventHub".ToLower();
            string consumerGroup = eventHubName + Guid.NewGuid().ToString().Substring(0, 6);

            CreateEventHub(eventHubName, consumerGroup);
            try
            {
                string        message = "HelloWorld";
                PingPong.Ping aMsg    = new PingPong.Ping(message);
                IActorMessageSerializationActor serializer = new IActorMessageSerializationActor();
                Telegraph.Instance.Register <PingPong.Ping, SendMessageToEventHub <PingPong.Ping> >(() => new SendMessageToEventHub <PingPong.Ping>(Connections.EventHubConnectionString, eventHubName, true));
                Telegraph.Instance.Register <SerializeMessage <IActorMessage>, IActorMessageSerializationActor>(() => serializer);

                if (!Telegraph.Instance.Ask(aMsg).Wait(new TimeSpan(0, 0, 10)))
                {
                    Assert.Fail("Waited too long to send a message");
                }

                IActorMessageDeserializationActor deserializer = new IActorMessageDeserializationActor();
                deserializer.Register <PingPong.Ping>((object msg) => (PingPong.Ping)msg);
                EventData ehMessage = null;
                StartEventHubReciever(eventHubName, consumerGroup);
                WaitForQueue(ehMsgQueue, out ehMessage);
                DeserializeMessage <IActorMessage> dMsg = new DeserializeMessage <IActorMessage>(ehMessage.Body.ToArray());
                deserializer.Ask(dMsg);
                var retMsgs = (PingPong.Ping)dMsg.ProcessingResult;
                Assert.IsTrue(((string)retMsgs.Message).Equals(message));
            }
            finally
            {
                Telegraph.Instance.UnRegisterAll();
                DeleteEventHub(eventHubName);
            }
        }
예제 #8
0
        public void TestSendingObjectToMsmq()
        {
            Telegraph.Instance.UnRegisterAll();
            // create message
            string messageString = "Hello World";
            string queueName     = "TestSendingObjectToMsmq";

            MsmqDeliveryOperator <PingPong.Ping> deliveryOp = new MsmqDeliveryOperator <PingPong.Ping>(queueName);

            Telegraph.Instance.Register <PingPong.Ping, MsmqDeliveryOperator <PingPong.Ping> >(() => deliveryOp);

            // Send message to queue
            List <Task> waitTasks = new List <Task>();
            int         i         = 0;

            for (i = 0; i < 100; ++i)
            {
                PingPong.Ping ping = new PingPong.Ping(messageString);
                waitTasks.Add(Telegraph.Instance.Ask(ping));
            }

            Task.WaitAll(waitTasks.ToArray());
            Telegraph.Instance.UnRegisterAll();

            int count = 0;
            MsmqReceptionOperator <PingPong.Ping> receptionOp = new MsmqReceptionOperator <PingPong.Ping>(queueName);
            long azureOperatorID = Telegraph.Instance.Register(receptionOp);

            Telegraph.Instance.Register <PingPong.Ping>(azureOperatorID, ping =>
            {
                PingPong.Ping msg = (PingPong.Ping)ping;
                System.Threading.Thread.Sleep(100);
                System.Threading.Interlocked.Increment(ref count);
            });

            int attempts = 20;

            while (attempts != 0 && count < i)
            {
                System.Threading.Thread.Sleep(1000);
                --attempts;
            }
            System.Diagnostics.Debug.WriteLine("Count:" + count);
            Assert.IsTrue(count == i);
            System.Messaging.MessageQueue.Delete(receptionOp.Queue.Path);
        }
예제 #9
0
        public void RecieveActorMessageFromDirectoryQueue()
        {
            string queueName = "test-" + "RecieveActorMessageFromStorageQueue".ToLower();

            using (var queue = GetDirectoryQueue(queueName))
            {
                queue.CreateIfNotExists();
                try
                {
                    string message      = "HelloWorld";
                    var    actorMessage = new PingPong.Ping(message);
                    SerializeMessage <IActorMessage> sMsg       = new SerializeMessage <IActorMessage>(actorMessage);
                    IActorMessageSerializationActor  serializer = new IActorMessageSerializationActor();
                    serializer.OnMessageRecieved(sMsg);
                    byte[]           msgBytes = (byte[])sMsg.ProcessingResult;
                    ManualResetEvent received = new ManualResetEvent(false);

                    IActorMessageDeserializationActor deserilaizationActor = new IActorMessageDeserializationActor();
                    Telegraph.Instance.Register <DeserializeMessage <IActorMessage> >(deserilaizationActor);
                    deserilaizationActor.Register((object msg) => (IActorMessage)msg);
                    deserilaizationActor.Register((object msg) => (PingPong.Ping)msg);

                    long azureOperatorID = Telegraph.Instance.Register(
                        new DirectoryQueueSubscriptionOperator <IActorMessage>(LocalConcurrencyType.DedicatedThreadCount, queueRootPath, queueName, false, 2),
                        (PingPong.Ping foo) =>
                    {
                        Assert.IsTrue(message.Equals((string)foo.Message, StringComparison.InvariantCulture));
                        received.Set();
                    });

                    queue.AddMessage(new DirectoryQueueMessage(msgBytes));

                    Assert.IsTrue(received.WaitOne(TimeSpan.FromSeconds(13), true), "We did not receive the message");
                }
                finally
                {
                    Telegraph.Instance.UnRegisterAll();
                    GetDirectoryQueue(queueName).Delete();
                    GetDirectoryQueue(queueName + "-deadletter").Delete();
                }
            }
        }
예제 #10
0
        public void TestSendingActorMessageToHybridConnection()
        {
            string relayName            = "TestSendingActorMessageToHybridConnection";
            string sendMessage          = "Hello";
            var    actorSendMessage     = new PingPong.Ping(sendMessage);
            var    actorResponseMessage = new PingPong.Pong();

            CreateHybridConnection(relayName);
            Telegraph.Instance.Register(typeof(Exception), FailOnException);
            HybridConnectionListener listener = null;

            try
            {
                listener = CreateHybridListener(relayName, actorResponseMessage);
                var relayConnection = new Telegraphy.Azure.Relay.Hybrid.RecieveResponseFromRequest <PingPong.Ping, PingPong.Pong>(Connections.HybridRelayConnectionString, relayName);

                IActorMessageSerializationActor   serializer   = new IActorMessageSerializationActor();
                IActorMessageDeserializationActor deserializer = new IActorMessageDeserializationActor();
                deserializer.Register <PingPong.Pong>((object msg) => (PingPong.Pong)msg);

                Telegraph.Instance.Register <SerializeMessage <PingPong.Ping>, IActorMessageSerializationActor>(() => serializer);
                Telegraph.Instance.Register <DeserializeMessage <PingPong.Pong>, IActorMessageDeserializationActor>(() => deserializer);

                Telegraph.Instance.Register <PingPong.Ping, Telegraphy.Azure.Relay.Hybrid.RecieveResponseFromRequest <PingPong.Ping, PingPong.Pong> >(() => relayConnection);
                var  resultTask = Telegraph.Instance.Ask(actorSendMessage);
                bool success    = resultTask.Wait(TimeSpan.FromSeconds(10));
                Assert.IsTrue(success);

                if (success)
                {
                    Assert.IsTrue(resultTask.Result is PingPong.Pong);
                }
            }
            finally
            {
                Telegraph.Instance.UnRegisterAll();
                try { listener?.CloseAsync().Wait(); } catch (Exception) { }
                DeleteRelay(relayName);
            }
        }
예제 #11
0
        public void RecieveActorMessageFromStorageQueuePostRegister()
        {
            string queueName = "test-" + "RecieveActorMessageFromStorageQueuePostRegister".ToLower();
            var    queue     = GetStorageQueue(queueName);

            queue.CreateIfNotExists();
            try
            {
                string message      = "HelloWorld";
                var    actorMessage = new PingPong.Ping(message);
                SerializeMessage <IActorMessage> sMsg       = new SerializeMessage <IActorMessage>(actorMessage);
                IActorMessageSerializationActor  serializer = new IActorMessageSerializationActor();
                serializer.OnMessageRecieved(sMsg);
                byte[]           msgBytes       = (byte[])sMsg.ProcessingResult;
                string           base64MsgBytes = Convert.ToBase64String(msgBytes);
                ManualResetEvent received       = new ManualResetEvent(false);

                Telegraph.Instance.Register <DeserializeMessage <IActorMessage>, IActorMessageDeserializationActor>(() => new IActorMessageDeserializationActor());

                long azureOperatorID = Telegraph.Instance.Register(
                    new StorageQueueSubscriptionOperator <IActorMessage>(LocalConcurrencyType.DedicatedThreadCount, Connections.StorageConnectionString, queueName, false, 2),
                    (PingPong.Ping foo) =>
                {
                    Assert.IsTrue(message.Equals((string)foo.Message, StringComparison.InvariantCulture));
                    received.Set();
                });

                queue.SendMessage(new BinaryData(base64MsgBytes));

                Assert.IsTrue(received.WaitOne(TimeSpan.FromSeconds(3), true), "We did not receive the message");
            }
            finally
            {
                Telegraph.Instance.UnRegisterAll();
                GetStorageQueue(queueName).DeleteAsync();
                GetStorageQueue(queueName + "-deadletter").DeleteAsync();
            }
        }
예제 #12
0
        public void SendActorMessageToServiceBusQueueViaOperator()
        {
            string queueName = "test-" + "SendActorMessageToServiceBusQueueViaOperator".ToLower();
            var    proc      = this.StartProcessing(queueName);

            try
            {
                string        message = "HelloWorld";
                PingPong.Ping aMsg    = new PingPong.Ping(message);

                long localOperatorID = Telegraph.Instance.Register(new LocalQueueOperator(LocalConcurrencyType.DedicatedThreadCount, 2));
                long azureOperatorId = Telegraph.Instance.Register(new ServiceBusQueuePublishOperator <IActorMessage>(Connections.ServiceBusConnectionString, queueName, true));
                Telegraph.Instance.Register <PingPong.Ping>(azureOperatorId);
                IActorMessageSerializationActor serializer = new IActorMessageSerializationActor();
                Telegraph.Instance.Register <SerializeMessage <IActorMessage>, IActorMessageSerializationActor>(localOperatorID, () => serializer);

                if (!Telegraph.Instance.Ask(aMsg).Wait(new TimeSpan(0, 0, 10)))
                {
                    Assert.Fail("Waited too long to send a message");
                }

                IActorMessageDeserializationActor deserializer = new IActorMessageDeserializationActor();
                deserializer.Register <PingPong.Ping>((object msg) => (PingPong.Ping)msg);
                ServiceBusReceivedMessage sbMessage = null;
                WaitForQueue(sbMsgQueue, out sbMessage);
                DeserializeMessage <IActorMessage> dMsg = new DeserializeMessage <IActorMessage>(sbMessage.Body.ToArray());
                deserializer.Ask(dMsg);
                var retMsgs = (PingPong.Ping)dMsg.ProcessingResult;
                Assert.IsTrue(((string)retMsgs.Message).Equals(message));
            }
            finally
            {
                proc.StopProcessingAsync().Wait();
                Telegraph.Instance.UnRegisterAll();
                DeleteServiceBusQueue(queueName);
            }
        }