Krzysztof Porebski created AMQNET-610: -----------------------------------------
Summary: Race condition during consumer creation and shutdown Key: AMQNET-610 URL: https://issues.apache.org/jira/browse/AMQNET-610 Project: ActiveMQ .Net Issue Type: Bug Components: AMQP, NMS Reporter: Krzysztof Porebski Working on CI I found a race condition that reveals itself on slower machines and may result in losing messages by consumers. The race condition is a result of treating the creation of consumer resources and starting them as an atomic operation: {code:java} public async Task Init() { await Session.Connection.CreateResource(Info); await Session.Connection.StartResource(Info); } {code} On slower boxes pending message may be delivered to the provider before above code returns: {code:java} public IMessageConsumer CreateConsumer(IDestination destination, string selector, bool noLocal) { CheckClosed(); NmsMessageConsumer messageConsumer = new NmsMessageConsumer(consumerIdGenerator.GenerateId(), this, destination, selector, noLocal); messageConsumer.Init().ConfigureAwait(false).GetAwaiter().GetResult(); // here may be a race condition consumers.TryAdd(messageConsumer.Info.Id, messageConsumer); return messageConsumer; } {code} If message arrives before `Init` returns (which means before newly created consumer is added to the list of available consumers), the message will be ignored. {code:java} public void OnInboundMessage(InboundMessageDispatch envelope) { if (consumers.TryGetValue(envelope.ConsumerInfo.Id, out NmsMessageConsumer messageConsumer)) { messageConsumer.OnInboundMessage(envelope); } } {code} -- This message was sent by Atlassian Jira (v8.3.2#803003)