示例#1
0
        public async Task <PushResult> Push(QueueMessage message, MqClient sender)
        {
            ProcessingMessage = message;
            PushResult result = await ProcessMessage(message, sender);

            ProcessingMessage = null;

            await _queue.Trigger();

            return(result);
        }
示例#2
0
        public async Task <PushResult> Push(QueueMessage message, MqClient sender)
        {
            //if we have an option maximum wait duration for message, set it after message joined to the queue.
            //time keeper will check this value and if message time is up, it will remove message from the queue.
            if (_queue.Options.MessageTimeout > TimeSpan.Zero)
            {
                message.Deadline = DateTime.UtcNow.Add(_queue.Options.MessageTimeout);
            }

            QueueMessage held = GetFirstMessageFromQueue(message);

            ProcessingMessage = held;
            PushResult result = await ProcessMessage(held);

            ProcessingMessage = null;

            await _queue.Trigger();

            return(result);
        }
示例#3
0
        public async Task <PushResult> Push(QueueMessage message, MqClient sender)
        {
            QueueMessage  held = GetFirstMessageFromQueue(message);
            ChannelClient cc   = _queue.Channel.GetNextRRClient(ref _roundRobinIndex);

            if (cc == null)
            {
                _queue.AddMessage(held, false);
                return(PushResult.NoConsumers);
            }

            ProcessingMessage = held;
            PushResult result = await ProcessMessage(held, cc);

            ProcessingMessage = null;

            await _queue.Trigger();

            return(result);
        }