protected override IDestination DoTransformDestination(IDestination destination) { return(DestinationTransformation.Transform(connection, destination)); }
protected void DoSend(IDestination destination, IMessage message, MsgDeliveryMode deliveryMode, MsgPriority priority, TimeSpan timeToLive) { this.Attach(); bool sendSync = deliveryMode.Equals(MsgDeliveryMode.Persistent); if (destination.IsTemporary && (destination as TemporaryDestination).IsDeleted) { throw new InvalidDestinationException("Can not send message on deleted temporary topic."); } message.NMSDestination = destination; message.NMSDeliveryMode = deliveryMode; message.NMSPriority = priority; // If there is timeToLive, set it before setting NMSTimestamp as timeToLive // is required to calculate absolute expiry time. // TBD: If the messageProducer has a non-default timeToLive and the message // already has a timeToLive set by application, which should take precedence, this // code overwrites the message TimeToLive in this case but not if the producer TimeToLive // is the default ... if (timeToLive != NMSConstants.defaultTimeToLive) { message.NMSTimeToLive = timeToLive; } if (!DisableMessageTimestamp) { message.NMSTimestamp = DateTime.UtcNow; } if (!DisableMessageID) { message.NMSMessageId = MessageIdGenerator.GenerateId().ToString(); } Amqp.Message amqpmsg = null; if (message is Message.Message) { Message.Message copy = (message as Message.Message).Copy(); copy.NMSDestination = DestinationTransformation.Transform(Session.Connection, destination); PrepareMessageForSend(copy); IMessageCloak cloak = copy.GetMessageCloak(); if (cloak is AMQPMessageCloak) { amqpmsg = (cloak as AMQPMessageCloak).AMQPMessage; } } else { Message.Message nmsmsg = this.Session.Connection.TransformFactory.TransformMessage <Message.Message>(message); PrepareMessageForSend(nmsmsg); IMessageCloak cloak = nmsmsg.GetMessageCloak().Copy(); if (cloak is AMQPMessageCloak) { amqpmsg = (cloak as AMQPMessageCloak).AMQPMessage; } } if (amqpmsg != null) { if (Tracer.IsDebugEnabled) { Tracer.DebugFormat("Sending message : {0}", message.ToString()); } if (sendSync) { DoAMQPSendSync(amqpmsg, this.RequestTimeout); } else { DoAMQPSendAsync(amqpmsg, HandleAsyncAMQPMessageOutcome); } } }