protected virtual MessageAck CreateMessageAck(Message message)
        {
            MessageAck ack = new MessageAck();

            ack.AckType        = (int)AckType.ConsumedAck;
            ack.ConsumerId     = info.ConsumerId;
            ack.Destination    = message.Destination;
            ack.FirstMessageId = message.MessageId;
            ack.LastMessageId  = message.MessageId;
            ack.MessageCount   = 1;

            if (session.Transacted)
            {
                session.DoStartTransaction();
                ack.TransactionId = session.TransactionContext.TransactionId;
                session.TransactionContext.AddSynchronization(new MessageConsumerSynchronization(this, message));
            }
            return(ack);
        }
        public void Send(IDestination destination, IMessage message, bool persistent, byte priority, TimeSpan timeToLive, bool specifiedTimeToLive)
        {
            ActiveMQMessage activeMessage = (ActiveMQMessage)message;

            if (!disableMessageID)
            {
                MessageId id = new MessageId();
                id.ProducerId = info.ProducerId;
                lock (this)
                {
                    id.ProducerSequenceId = ++messageCounter;
                }
                activeMessage.MessageId = id;
            }

            if (!disableMessageTimestamp && specifiedTimeToLive)
            {
                Console.WriteLine(">>> sending message with Timestamp: " + activeMessage.Timestamp + " and timeToLive:  " + timeToLive);
                activeMessage.Timestamp = ActiveMQ.Util.DateUtils.ToJavaTime(DateTime.UtcNow);
            }

            if (specifiedTimeToLive)
            {
                activeMessage.Expiration = ActiveMQ.Util.DateUtils.ToJavaTime(timeToLive);
            }

            activeMessage.ProducerId  = info.ProducerId;
            activeMessage.Destination = ActiveMQDestination.Transform(destination);

            if (session.Transacted)
            {
                session.DoStartTransaction();
                activeMessage.TransactionId = session.TransactionContext.TransactionId;
            }

            activeMessage.Persistent  = persistent;
            activeMessage.Priority    = priority;
            activeMessage.Destination = ActiveMQDestination.Transform(destination);

            session.DoSend(activeMessage);
        }