コード例 #1
0
        public INMSProducer Send(IDestination destination, IMessage message)
        {
            if (message == null)
            {
                throw new MessageFormatException("Message must not be null");
            }

            NmsMessageTransformation.CopyMap(messageProperties, message.Properties);

            if (correlationId != null)
            {
                message.NMSCorrelationID = correlationId;
            }
            if (type != null)
            {
                message.NMSType = type;
            }
            if (replyTo != null)
            {
                message.NMSReplyTo = replyTo;
            }

            producer.Send(destination, message);

            return(this);
        }
コード例 #2
0
        public INMSProducer Send(IDestination destination, IPrimitiveMap body)
        {
            IMapMessage message = CreateMapMessage();

            NmsMessageTransformation.CopyMap(body, message.Body);
            return(Send(destination, message));
        }
コード例 #3
0
        public void TestNMSMessageHeadersAreCopied()
        {
            string destinationName = "Test-Destination-Name";

            NmsMessage source = new NmsMessage(new NmsTestMessageFacade());

            NmsTopic destination = new NmsTopic(destinationName);
            NmsTopic replyTo     = new NmsTopic("ReplyTo: " + destinationName);

            source.NMSMessageId     = "ID:TEST";
            source.NMSCorrelationID = "ID:CORRELATION";
            source.NMSDestination   = destination;
            source.NMSReplyTo       = replyTo;
            source.NMSDeliveryMode  = MsgDeliveryMode.NonPersistent;
            source.NMSRedelivered   = true;
            source.NMSType          = "test-type";
            source.NMSPriority      = MsgPriority.Highest;
            source.NMSTimestamp     = DateTime.UtcNow;

            NmsMessage transformed = NmsMessageTransformation.TransformMessage(factory, source);

            Assert.AreEqual(source.NMSMessageId, transformed.NMSMessageId);
            Assert.AreEqual(source.NMSCorrelationID, transformed.NMSCorrelationID);
            Assert.AreEqual(source.NMSDestination, transformed.NMSDestination);
            Assert.AreEqual(source.NMSReplyTo, transformed.NMSReplyTo);
            Assert.AreEqual(source.NMSDeliveryMode, transformed.NMSDeliveryMode);
            Assert.AreEqual(source.NMSRedelivered, transformed.NMSRedelivered);
            Assert.AreEqual(source.NMSType, transformed.NMSType);
            Assert.AreEqual(source.NMSPriority, transformed.NMSPriority);
            Assert.AreEqual(source.NMSTimestamp, transformed.NMSTimestamp);
        }
コード例 #4
0
        public void TestForeignMessageTransformCreateNewMessage()
        {
            ForeignNmsMessage foreignMessage = new ForeignNmsMessage();

            NmsMessage transformed = NmsMessageTransformation.TransformMessage(factory, foreignMessage);

            Assert.AreNotSame(foreignMessage, transformed);
            Assert.AreNotEqual(foreignMessage, transformed);
        }
コード例 #5
0
        public void TestTransformNmsMessage()
        {
            NmsMessage orig = new NmsMessage(new NmsTestMessageFacade());

            orig.NMSMessageId = "ID:CONNECTION:1:1";

            NmsMessage transformed = NmsMessageTransformation.TransformMessage(factory, orig);

            Assert.NotNull(transformed);
            Assert.AreEqual(orig, transformed);
            Assert.AreNotSame(orig, transformed);
        }
コード例 #6
0
        public void TestEmptyForeignBytesMessageTransformCreateNewMessage()
        {
            ForeignNmsBytesMessage foreignMessage = new ForeignNmsBytesMessage();

            NmsMessage transformed = NmsMessageTransformation.TransformMessage(factory, foreignMessage);

            Assert.AreNotSame(foreignMessage, transformed);
            Assert.IsInstanceOf <NmsBytesMessage>(transformed);
            NmsBytesMessage message = (NmsBytesMessage)transformed;

            message.Reset();
            Assert.AreEqual(0, message.BodyLength);
        }
コード例 #7
0
        public void TestEmptyForeignObjectMessageTransformCreateNewMessage()
        {
            ForeignNmsObjectMessage foreignMessage = new ForeignNmsObjectMessage();

            NmsMessage transformed = NmsMessageTransformation.TransformMessage(factory, foreignMessage);

            Assert.AreNotSame(foreignMessage, transformed);

            Assert.IsInstanceOf <NmsObjectMessage>(transformed);
            NmsObjectMessage message = (NmsObjectMessage)transformed;

            Assert.IsNull(message.Body);
        }
コード例 #8
0
        public void TestForeignMapMessageTransformCreateNewMessage()
        {
            ForeignNmsMapMessage foreignMessage = new ForeignNmsMapMessage();

            foreignMessage.Body.SetBool("bool", true);
            foreignMessage.Body.SetChar("char", 'a');
            foreignMessage.Body.SetString("string", "string");
            foreignMessage.Body.SetByte("byte", 1);
            foreignMessage.Body.SetShort("short", 1);
            foreignMessage.Body.SetInt("int", 1);
            foreignMessage.Body.SetLong("long", 1);
            foreignMessage.Body.SetFloat("float", 1.5F);
            foreignMessage.Body.SetDouble("double", 1.5D);
            foreignMessage.Body.SetList("list", new List <string>()
            {
                "a"
            });
            foreignMessage.Body.SetDictionary("dictionary", new Dictionary <string, string>()
            {
                { "a", "a" }
            });
            foreignMessage.Body.SetBytes("bytes", new byte[] { 6 });

            NmsMessage transformed = NmsMessageTransformation.TransformMessage(factory, foreignMessage);

            Assert.IsNotNull(transformed);
            Assert.AreNotSame(foreignMessage, transformed);

            Assert.IsInstanceOf <NmsMapMessage>(transformed);

            NmsMapMessage message = (NmsMapMessage)transformed;

            Assert.IsTrue(message.Body.GetBool("bool"));
            Assert.AreEqual('a', message.Body.GetChar("char"));
            Assert.AreEqual("string", message.Body.GetString("string"));
            Assert.AreEqual(1, message.Body.GetByte("byte"));
            Assert.AreEqual(1, message.Body.GetShort("short"));
            Assert.AreEqual(1, message.Body.GetInt("int"));
            Assert.AreEqual(1, message.Body.GetLong("long"));
            Assert.AreEqual(1.5F, message.Body.GetFloat("float"));
            Assert.AreEqual(1.5F, message.Body.GetDouble("double"));
            CollectionAssert.AreEqual(new List <string>()
            {
                "a"
            }, message.Body.GetList("list"));
            CollectionAssert.AreEqual(new Dictionary <string, string>()
            {
                { "a", "a" }
            }, message.Body.GetDictionary("dictionary"));
            CollectionAssert.AreEqual(new byte[] { 6 }, message.Body.GetBytes("bytes"));
        }
コード例 #9
0
        public void TestEmptyForeignMapMessageTransformCreateNewMessage()
        {
            ForeignNmsMapMessage foreignMessage = new ForeignNmsMapMessage();

            NmsMessage transformed = NmsMessageTransformation.TransformMessage(factory, foreignMessage);

            Assert.IsNotNull(transformed);
            Assert.AreNotSame(foreignMessage, transformed);

            Assert.IsInstanceOf <NmsMapMessage>(transformed);

            NmsMapMessage message = (NmsMapMessage)transformed;

            CollectionAssert.IsEmpty(message.Body.Keys);
        }
コード例 #10
0
        public void TestForeignObjectMessageTransformCreateNewMessage()
        {
            string messageBody = "TEST-MESSAGE-BODY";
            ForeignNmsObjectMessage foreignMessage = new ForeignNmsObjectMessage();

            foreignMessage.Body = messageBody;

            NmsMessage transformed = NmsMessageTransformation.TransformMessage(factory, foreignMessage);

            Assert.AreNotSame(foreignMessage, transformed);

            Assert.IsInstanceOf <NmsObjectMessage>(transformed);
            NmsObjectMessage message = (NmsObjectMessage)transformed;

            Assert.AreEqual(messageBody, message.Body);
        }
コード例 #11
0
        public void TestEmptyForeignStreamMessageTransformCreateNewMessage()
        {
            ForeignNmsStreamMessage foreignMessage = new ForeignNmsStreamMessage();

            NmsMessage transformed = NmsMessageTransformation.TransformMessage(factory, foreignMessage);

            Assert.IsNotNull(transformed);
            Assert.AreNotSame(foreignMessage, transformed);

            Assert.IsInstanceOf <NmsStreamMessage>(transformed);

            NmsStreamMessage message = (NmsStreamMessage)transformed;

            message.Reset();
            Assert.Catch <MessageEOFException>(() => message.ReadBoolean());
        }
コード例 #12
0
        public void TestForeignBytesMessageTransformCreateNewMessage()
        {
            ForeignNmsBytesMessage foreignMessage = new ForeignNmsBytesMessage();

            foreignMessage.WriteBoolean(true);
            foreignMessage.Properties.SetBool("boolProperty", true);

            NmsMessage transformed = NmsMessageTransformation.TransformMessage(factory, foreignMessage);

            Assert.AreNotSame(foreignMessage, transformed);
            Assert.IsInstanceOf <NmsBytesMessage>(transformed);
            NmsBytesMessage message = (NmsBytesMessage)transformed;

            message.Reset();
            Assert.IsTrue(message.BodyLength > 0);
            Assert.IsTrue(message.ReadBoolean());
            Assert.IsTrue(message.Properties.Contains("boolProperty"));
        }
コード例 #13
0
        public void TestNMSMessagePropertiesAreCopied()
        {
            ForeignNmsMapMessage foreignMessage = new ForeignNmsMapMessage();

            foreignMessage.Properties.SetBool("bool", true);
            foreignMessage.Properties.SetChar("char", 'a');
            foreignMessage.Properties.SetString("string", "string");
            foreignMessage.Properties.SetByte("byte", 1);
            foreignMessage.Properties.SetShort("short", 1);
            foreignMessage.Properties.SetInt("int", 1);
            foreignMessage.Properties.SetLong("long", 1);
            foreignMessage.Properties.SetFloat("float", 1.5F);
            foreignMessage.Properties.SetDouble("double", 1.5D);
            foreignMessage.Properties.SetList("list", new List <string>()
            {
                "a"
            });
            foreignMessage.Properties.SetDictionary("dictionary", new Dictionary <string, string>()
            {
                { "a", "a" }
            });
            foreignMessage.Properties.SetBytes("bytes", new byte[] { 6 });

            NmsMessage transformed = NmsMessageTransformation.TransformMessage(factory, foreignMessage);

            Assert.IsTrue(transformed.Properties.GetBool("bool"));
            Assert.AreEqual('a', transformed.Properties.GetChar("char"));
            Assert.AreEqual("string", transformed.Properties.GetString("string"));
            Assert.AreEqual(1, transformed.Properties.GetByte("byte"));
            Assert.AreEqual(1, transformed.Properties.GetShort("short"));
            Assert.AreEqual(1, transformed.Properties.GetInt("int"));
            Assert.AreEqual(1, transformed.Properties.GetLong("long"));
            Assert.AreEqual(1.5F, transformed.Properties.GetFloat("float"));
            Assert.AreEqual(1.5F, transformed.Properties.GetDouble("double"));
            CollectionAssert.AreEqual(new List <string>()
            {
                "a"
            }, transformed.Properties.GetList("list"));
            CollectionAssert.AreEqual(new Dictionary <string, string>()
            {
                { "a", "a" }
            }, transformed.Properties.GetDictionary("dictionary"));
            CollectionAssert.AreEqual(new byte[] { 6 }, transformed.Properties.GetBytes("bytes"));
        }
コード例 #14
0
        public void TestForeignStreamMessageTransformCreateNewMessage()
        {
            ForeignNmsStreamMessage foreignMessage = new ForeignNmsStreamMessage();

            foreignMessage.WriteBoolean(true);
            foreignMessage.WriteString("test");
            foreignMessage.WriteBoolean(true);

            NmsMessage transformed = NmsMessageTransformation.TransformMessage(factory, foreignMessage);

            Assert.IsNotNull(transformed);
            Assert.AreNotSame(foreignMessage, transformed);

            Assert.IsInstanceOf <NmsStreamMessage>(transformed);

            NmsStreamMessage message = (NmsStreamMessage)transformed;

            message.Reset();
            Assert.IsTrue(message.ReadBoolean());
            Assert.AreEqual("test", message.ReadString());
            Assert.IsTrue(message.ReadBoolean());
        }
コード例 #15
0
        public void Send(NmsMessageProducer producer, IDestination destination, IMessage original, MsgDeliveryMode deliveryMode,
                         MsgPriority priority, TimeSpan timeToLive, bool disableMessageId, bool disableMessageTimestamp)
        {
            if (destination == null)
            {
                throw new InvalidDestinationException("Destination must not be null");
            }

            if (original == null)
            {
                throw new MessageFormatException("Message must not be null");
            }

            NmsMessage outbound = null;

            original.NMSDeliveryMode = deliveryMode;
            original.NMSPriority     = priority;
            original.NMSRedelivered  = false;
            original.NMSDestination  = destination;

            bool isNmsMessage = original is NmsMessage;

            DateTime timeStamp = DateTime.UtcNow;

            bool hasTTL = timeToLive > TimeSpan.Zero;

            if (!disableMessageTimestamp)
            {
                original.NMSTimestamp = timeStamp;
            }
            else
            {
                original.NMSTimestamp = DateTime.MinValue;
            }

            if (!disableMessageId)
            {
                original.NMSMessageId = producer.MessageIdGenerator.GenerateId().ToString();
            }
            else
            {
                original.NMSMessageId = null;
            }

            if (isNmsMessage)
            {
                outbound = (NmsMessage)original;
            }
            else
            {
                outbound = NmsMessageTransformation.TransformMessage(Connection.MessageFactory, original);
            }

            if (hasTTL)
            {
                outbound.Facade.Expiration = timeStamp + timeToLive;
            }
            else
            {
                outbound.Facade.Expiration = DateTime.MinValue;
            }

            outbound.OnSend(timeToLive);

            bool sync = deliveryMode == MsgDeliveryMode.Persistent;

            Connection.Send(new OutboundMessageDispatch
            {
                Message      = outbound,
                ProducerId   = producer.Info.Id,
                ProducerInfo = producer.Info,
                SendAsync    = !sync
            }).ConfigureAwait(false).GetAwaiter().GetResult();
        }