private IDelayedMessage[] pullFromMemCache(string channel, string key = null, int?max = null)
        {
            var cacheKey = new CacheKey(channel, key);

            // Check memcache even if key == null because messages failing to save to ES are put in memcache
            var messages = new IDelayedMessage[] { };

            lock (_cacheLock)
            {
                if (_memCache.TryGetValue(cacheKey, out var fromCache))
                {
                    _memCache.Remove(cacheKey);
                }

                if (fromCache == null)
                {
                    return(messages);
                }

                messages = fromCache.Dequeue(max);
                if (fromCache.Count != 0)
                {
                    _memCache[cacheKey] = fromCache;
                }
            }
            return(messages);
        }
        public Task AddToQueue(string channel, IDelayedMessage queued, string key = null)
        {
            var specificKey = new Tuple <string, string>(channel, key);

            _uncommitted.AddOrUpdate(specificKey, new List <IDelayedMessage> {
                queued
            }, (k, existing) => {
                existing.Add(queued);
                return(existing);
            });


            return(Task.CompletedTask);
        }
Exemple #3
0
        public Task AddToQueue(string channel, IDelayedMessage queued, string key = null)
        {
            Logger.Write(LogLevel.Debug, () => $"Appending delayed object to channel [{channel}] key [{key}]");

            var specificKey = new Tuple <string, string>(channel, key);

            _uncommitted.AddOrUpdate(specificKey, new List <IDelayedMessage> {
                queued
            }, (k, existing) => {
                existing.Add(queued);
                return(existing);
            });


            return(Task.CompletedTask);
        }
        public async Task multiple_bulk_events()
        {
            var delayed = new Moq.Mock <IDelayedMessage>();

            delayed.Setup(x => x.Headers).Returns(new Dictionary <string, string>
            {
                ["test"] = "test"
            });

            var events = new IDelayedMessage[] { delayed.Object, delayed.Object, delayed.Object };

            _contextBag.Set(Defaults.LocalBulkHeader, events);

            var headers = new Dictionary <string, string>();

            _context.Setup(x => x.Headers).Returns(headers);

            await _executor.Invoke(_context.Object, _next.Object);

            _context.Verify(x => x.UpdateMessageInstance(Moq.It.IsAny <object>()), Moq.Times.Exactly(3));
            _next.Verify(x => x(), Moq.Times.Exactly(3));
        }
Exemple #5
0
        public Task AddToQueue(string channel, IDelayedMessage queued, string key = null)
        {
            Logger.Write(LogLevel.Debug, () => $"Appending delayed object to channel [{channel}] key [{key}]");

            if (queued == null)
            {
                Logger.Write(LogLevel.Warn, () => $"Adding NULL queued object! Stack: {Environment.StackTrace}");
                return(Task.CompletedTask);
            }

            var specificKey = new Tuple <string, string>(channel, key);

            lock (_lock)
            {
                if (!_uncommitted.ContainsKey(specificKey))
                {
                    _uncommitted[specificKey] = new List <IDelayedMessage>();
                }
                _uncommitted[specificKey].Add(queued);
            }


            return(Task.CompletedTask);
        }