Exemplo n.º 1
0
        public async Task <IActionResult> PeekMessage(Guid queuId)
        {
            this.logger.LogTrace("Call Peek for queuId={0}", queuId);
            MqSettings settings = this.mqSettings.Value;

            for (; ;)
            {
                Guid?messageId = await this.messageRepository.PeekMessageAsync(queuId).ConfigureAwait(false);

                if (messageId.HasValue)
                {
                    MessageDto message = await this.messageRepository.ReadById(messageId.Value).ConfigureAwait(false);

                    if (message.RetryCount > settings.MaxDefaultRetryCount)
                    {
                        await this.ProcessPosionMessage(message).ConfigureAwait(false);

                        await this.messageRepository.RemoveAsync(messageId.Value).ConfigureAwait(false);

                        continue;
                    }

                    return(this.Ok(message));
                }
                else
                {
                    return(this.NoContent());
                }
            }
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            var settings = new MqSettings
            {
                Channel      = "DEMO.DEV.SVRCONN",
                Connection   = "localhost(1414)",
                QueueManager = "QM1"
            };

            var receiver = new MessageReceiver(settings);
            var sender   = new MessageSender(settings);

            var receiveStarted = false;
            var sendStarted    = false;
            var keyInfo        = new ConsoleKeyInfo();

            while (keyInfo.KeyChar != 'e' && keyInfo.KeyChar != 'E')
            {
                Console.WriteLine("Press <e> to Exit, <r> to stop/start receiving messages, <s> to stop/start sending messages");
                keyInfo = Console.ReadKey();
                if (keyInfo.KeyChar == 'r')
                {
                    if (receiveStarted)
                    {
                        Console.WriteLine("Stopping all message receivers...");
                        receiver.StopAll();
                    }
                    else
                    {
                        Console.WriteLine("Starting all message receivers...");
                        StartMessagePumps(receiver);
                    }

                    receiveStarted = !receiveStarted;
                }
                else if (keyInfo.KeyChar == 's')
                {
                    if (sendStarted)
                    {
                        Console.WriteLine("Stopping all message senders...");
                        sender.StopAll();
                    }
                    else
                    {
                        Console.WriteLine("Starting all message senders...");
                        StartMessageSenders(sender);
                    }

                    sendStarted = !sendStarted;
                }
            }
        }
Exemplo n.º 3
0
        public async Task <IActionResult> Exchange(Guid queuId, [FromBody] ExchangeModel exchangeModel)
        {
            this.logger.LogTrace("Call GetMessage for queuId={0}, nextVisibleInMs={1}", queuId, exchangeModel?.NextVisibleInMs);

            MqSettings settings = this.mqSettings.Value;

            for (; ;)
            {
                TimeSpan nextVisibility = settings.DefaultRetry;
                if (exchangeModel != null && exchangeModel.NextVisibleInMs.HasValue)
                {
                    nextVisibility = TimeSpan.FromMilliseconds(exchangeModel.NextVisibleInMs.Value);
                }

                Guid?messageId = await this.messageRepository.ReserveMessageAsync(queuId, nextVisibility).ConfigureAwait(false);

                if (messageId.HasValue)
                {
                    MessageDto message = await this.messageRepository.ReadById(messageId.Value).ConfigureAwait(false);

                    if (message.RetryCount > settings.MaxDefaultRetryCount)
                    {
                        await this.ProcessPosionMessage(message).ConfigureAwait(false);

                        await this.messageRepository.RemoveAsync(messageId.Value).ConfigureAwait(false);

                        continue;
                    }

                    return(this.Ok(message));
                }
                else
                {
                    return(this.NoContent());
                }
            }
        }
Exemplo n.º 4
0
 public MessageSender(MqSettings settings)
 {
     _settings = settings;
     _tasks    = new ConcurrentBag <Task>();
     _ct       = new CancellationTokenSource();
 }