public async Task Invoke(IMessage message)
        {
            try
            {
                if (this.closed)
                {
                    throw new InvalidOperationException($"Endpoint executor for endpoint {this.Endpoint} is closed.");
                }

                using (MetricsV0.StoreLatency(this.Endpoint.Id))
                {
                    long offset = await this.messageStore.Add(this.Endpoint.Id, message);

                    this.checkpointer.Propose(message);
                    Events.AddMessageSuccess(this, offset);
                }

                this.hasMessagesInQueue.Set();
                MetricsV0.StoredCountIncrement(this.Endpoint.Id);
            }
            catch (Exception ex)
            {
                Events.AddMessageFailure(this, ex);
                throw;
            }
        }
Example #2
0
        public async Task Invoke(IMessage message, uint priority, uint timeToLiveSecs)
        {
            try
            {
                if (this.closed)
                {
                    throw new InvalidOperationException($"Endpoint executor for endpoint {this.Endpoint} is closed.");
                }

                using (MetricsV0.StoreLatency(this.Endpoint.Id))
                {
                    // Get the checkpointer corresponding to the queue for this priority
                    ImmutableDictionary <uint, EndpointExecutorFsm> snapshot = this.prioritiesToFsms;
                    ICheckpointer checkpointer = snapshot[priority].Checkpointer;

                    IMessage storedMessage = await this.messageStore.Add(GetMessageQueueId(this.Endpoint.Id, priority), message, timeToLiveSecs);

                    checkpointer.Propose(storedMessage);
                    Events.AddMessageSuccess(this, storedMessage.Offset, priority, timeToLiveSecs);
                }

                this.hasMessagesInQueue.Set();
                MetricsV0.StoredCountIncrement(this.Endpoint.Id, priority);
            }
            catch (Exception ex)
            {
                Routing.UserMetricLogger.LogIngressFailureMetric(1, this.Endpoint.IotHubName, message, "storage_failure");
                Events.AddMessageFailure(this, ex);
                throw;
            }
        }
        public async Task Invoke(IMessage message, uint priority, uint timeToLiveSecs)
        {
            // TODO: 6099894 - Update StoringAsyncEndpointExecutor message enqueue logic to be aware of priorities
            try
            {
                if (this.closed)
                {
                    throw new InvalidOperationException($"Endpoint executor for endpoint {this.Endpoint} is closed.");
                }

                using (MetricsV0.StoreLatency(this.Endpoint.Id))
                {
                    IMessage storedMessage = await this.messageStore.Add(this.Endpoint.Id, message);

                    this.checkpointer.Propose(storedMessage);
                    Events.AddMessageSuccess(this, storedMessage.Offset);
                }

                this.hasMessagesInQueue.Set();
                MetricsV0.StoredCountIncrement(this.Endpoint.Id);
            }
            catch (Exception ex)
            {
                Events.AddMessageFailure(this, ex);
                throw;
            }
        }