Beispiel #1
0
        private (Mock <IConnectionMultiplexer> MockConnectionMultiplexer, Mock <ISubscriber> MockSubscriber, Mock <ILogger> MockLogger, RedisDataManager RedisDataManager) MockRedisDataManager(Mock <IConnectionMultiplexerFactory> connectionMultiplexerFactory = null, RedisStreamOptions redisStreamOptions = null)
        {
            var mockConnectionMultiplexer = new Mock <IConnectionMultiplexer> {
                DefaultValue = DefaultValue.Mock
            };
            var mockSubscriber = new Mock <ISubscriber> {
                DefaultValue = DefaultValue.Mock
            };
            var mockLogger = new Mock <ILogger>()
            {
                DefaultValue = DefaultValue.Mock
            };

            mockLogger.Setup(x => x.ForContext <RedisDataManager>()).Callback(() => { int j = 5; }).Returns(mockLogger.Object);

            mockConnectionMultiplexer
            .Setup(x => x.GetSubscriber(It.IsAny <object>()))
            .Returns(mockSubscriber.Object);

            var rdm = new RedisDataManager(
                redisStreamOptions ?? TestConstants.ValidRedisStreamOptions,
                connectionMultiplexerFactory?.Object ?? MockConnectionMultiplexerFactory.Returns(mockConnectionMultiplexer.Object),
                mockLogger.Object,
                TestConstants.ValidQueueName,
                TestConstants.ValidServiceId,
                TestConstants.ValidClusterId);

            return(mockConnectionMultiplexer, mockSubscriber, mockLogger, rdm);
        }
        public async Task QueueMessageBatchAsync <T>(Guid streamGuid, string streamNamespace, IEnumerable <T> events, StreamSequenceToken token, Dictionary <string, object> requestContext)
        {
            if (token != null)
            {
                throw new ArgumentException("Redis stream provider currently does not support non-null StreamSequenceToken.", nameof(token));
            }

            var queueId = _streamQueueMapper.GetQueueForStream(streamGuid, streamNamespace);

            if (!Queues.TryGetValue(queueId, out var queue))
            {
                var tmpQueue = new RedisDataManager(_redisStreamOptions, _connectionMultiplexerFactory, _logger, queueId.ToString(), ServiceId, ClusterId);
                await tmpQueue.InitAsync();

                queue = Queues.GetOrAdd(queueId, tmpQueue);
            }

            var redisMessage = _dataAdapter.ToRedisValue(streamGuid, streamNamespace, events, requestContext);
            await queue.AddQueueMessage(redisMessage);
        }