Example #1
0
 public void RemoveMessage(IList <string> messageIds, MessageRemovedReason reason)
 {
     foreach (string messageid in messageIds)
     {
         RemoveMessage(messageid, reason);
     }
 }
Example #2
0
        /// <summary>
        /// Removes message
        /// </summary>
        /// <param name="messageId"></param>
        /// <param name="reason"></param>
        /// <returns>Returns message object</returns>
        public Message RemoveMessage(string messageId, MessageRemovedReason reason)
        {
            Message message = null;
            bool    removed = true;

            lock (_mutex)
            {
                if (_messages.TryGetValue(messageId, out message))
                {
                    if (reason == MessageRemovedReason.Expired && message.MessageMetaData.IsNotify &&
                        !message.MessageMetaData.EverAcknowledged)
                    {
                        message.MessageMetaData.SubscriptionType    = SubscriptionType.Publisher;
                        message.MessageMetaData.DeliveryFailed      = true;
                        message.MessageMetaData.IsAssigned          = true;
                        message.MessageMetaData.AssigmentTime       = null;
                        message.MessageMetaData.MessgeFailureReason = MessgeFailureReason.Expired;
                        //moved to undelivered queue
                        _undeliveredMessages.Enqueue(message.MessageId, message);
                        removed = false;
                    }
                    else
                    {
                        _messages.Remove(messageId);
                        _undeliveredMessages.Remove(messageId);
                        _size -= message.Size;
                        if (_listener != null)
                        {
                            _listener.OnSizeDecrement(message.Size);
                            _listener.OnCountDecrement(1);
                        }
                    }


                    message.MessageMetaData.OnMessageRemoved();

                    _unassignedMessages.Remove(messageId);
                    _deliveredMessages.Remove(messageId);

                    if (message.MessageMetaData.AbsoluteExpiratoinTime.HasValue)
                    {
                        _expirationIndex.Remove(messageId);
                    }
                }
            }

            if (removed && reason == MessageRemovedReason.Delivered && message.MessageMetaData.SubscriptionType == SubscriptionType.Subscriber)
            {
                if (_context.PerfStatsColl != null)
                {
                    _context.PerfStatsColl.IncrementMessageDeliverPerSec();
                }
            }
            //only return message if it is removed from _messages
            return(removed ? message : null);
        }
Example #3
0
        internal Message RemoveMessage(MessageInfo message, MessageRemovedReason reason)
        {
            Topic topic = GetTopic(message.Topic);

            if (topic != null)
            {
                return(topic.RemoveMessage(message.MessageId, reason));
            }
            return(null);
        }
Example #4
0
        /// <summary>
        /// Removes message
        /// </summary>
        /// <param name="messageId"></param>
        /// <param name="reason"></param>
        /// <returns>Retruns message object</returns>
        public Message RemoveMessage(string messageId, MessageRemovedReason reason)
        {
            Message message = null;
            bool    removed = true;

            lock (_mutex)
            {
                if (_messages.TryGetValue(messageId, out message))
                {
                    _messages.Remove(messageId);

                    _size -= message.Size;
                    if (_listener != null)
                    {
                        _listener.OnSizeDecrement(message.Size);
                        _listener.OnCountDecrement(1);
                    }

                    message.MessageMetaData.OnMessageRemoved();
                    _unassignedMessages.Remove(messageId);
                    _deliveredMessages.Remove(messageId);

                    if (message.MessageMetaData.AbsoluteExpiratoinTime.HasValue)
                    {
                        _expirationIndex.Remove(messageId);
                    }
                }
            }
            if (_context.IsStartedAsMirror && message == null)
            {
                return(null);
            }

            if (removed && reason == MessageRemovedReason.Delivered && message?.MessageMetaData.SubscriptionType == SubscriptionType.Subscriber)
            {
                if (_context.PerfStatsColl != null && !_context.IsStartedAsMirror)
                {
                    _context.PerfStatsColl.IncrementMessageDeliverPerSec();
                }
            }
            //only return message if it is removed from _messages
            return(removed ? message : null);
        }
Example #5
0
        public override void RemoveMessages(IList <MessageInfo> messagesTobeRemoved, MessageRemovedReason reason, OperationContext context)
        {
            HashVector errors = new HashVector();

            foreach (MessageInfo messageInfo in messagesTobeRemoved)
            {
                try
                {
                    RemoveMessagesInternal(messageInfo, reason, context);
                }
                catch (Exception e)
                {
                    errors.Add(messageInfo, e);
                }
            }

            if (_context.PerfStatsColl != null)
            {
                _context.PerfStatsColl.SetCacheSize(Size);
            }
        }
Example #6
0
 protected virtual Messaging.Message RemoveMessagesInternal(MessageInfo messageTobeRemoved, MessageRemovedReason reason, OperationContext context)
 {
     return(_topicManager.RemoveMessage(messageTobeRemoved, reason));
 }
Example #7
0
 public void Deserialize(CompactReader reader)
 {
     _message = reader.ReadObject() as MessageInfo;
     _reason  = (MessageRemovedReason)reader.ReadInt32();
     _context = reader.ReadObject() as OperationContext;
 }
Example #8
0
 public AtomicRemoveMessageOperation(MessageInfo messageTobeRemoved, MessageRemovedReason reason, OperationContext context)
 {
     _message = messageTobeRemoved;
     _reason  = reason;
     _context = context;
 }
Example #9
0
        internal IList <Message> RemoveMessages(IList <MessageInfo> messagesTobeRemoved, MessageRemovedReason reason)
        {
            IList <Message> removedMessages = new List <Message>(messagesTobeRemoved.Count);

            try
            {
                _rwLock.EnterReadLock();
                foreach (MessageInfo message in messagesTobeRemoved)
                {
                    Topic topic = GetTopic(message.Topic);

                    if (topic != null)
                    {
                        Message removed = topic.RemoveMessage(message.MessageId, reason);
                        if (removed != null)
                        {
                            removedMessages.Add(removed);
                        }
                    }
                }
            }
            finally
            {
                _rwLock.ExitReadLock();
            }
            return(removedMessages);
        }
Example #10
0
 public void Deserialize(CompactReader reader)
 {
     _messagesTobeRemoved = SerializationUtility.DeserializeList <MessageInfo>(reader);
     _reason  = (MessageRemovedReason)reader.ReadInt32();
     _context = reader.ReadObject() as OperationContext;
 }
Example #11
0
 public RemoveMessagesOperation(IList <MessageInfo> messagesTobeRemoved, MessageRemovedReason reason, OperationContext context)
 {
     _messagesTobeRemoved = messagesTobeRemoved;
     _reason  = reason;
     _context = context;
 }