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()); } } }
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; } } }
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()); } } }
public MessageSender(MqSettings settings) { _settings = settings; _tasks = new ConcurrentBag <Task>(); _ct = new CancellationTokenSource(); }