コード例 #1
0
ファイル: RedisRecordStorage.cs プロジェクト: ilkerhalil/Rin
        public static Func <IServiceProvider, IRecordStorage> DefaultFactoryWithOptions(Action <RedisRecordStorageOptions> configure)
        {
            return((services) =>
            {
                var retentionMaxRequests = services.GetService <RinOptions>().RequestRecorder.RetentionMaxRequests;
                var options = new RedisRecordStorageOptions()
                {
                    RetentionMaxRequests = retentionMaxRequests
                };
                configure?.Invoke(options);

                return new RedisRecordStorage(options, services.GetService <IMessageEventBus <RequestEventMessage> >());
            });
        }
コード例 #2
0
ファイル: RedisRecordStorage.cs プロジェクト: ilkerhalil/Rin
        public RedisRecordStorage(RedisRecordStorageOptions options, IMessageEventBus <RequestEventMessage> eventBus)
        {
            _options         = options;
            _eventBus        = eventBus;
            _redisConnection = ConnectionMultiplexer.Connect(_options.ConnectionConfiguration);
            _redis           = _redisConnection.GetDatabase(_options.Database);

            _redisSubscriber = _redisConnection.GetSubscriber();
            _redisSubscriber.Subscribe(GetRedisKey(RedisSubscriptionKey), (channel, value) =>
            {
                var message = Deserialize <RequestEventMessage>(value);

                // Ignore a messages from this storage.
                if (message.EventSource == _eventSourceKey)
                {
                    return;
                }

                _eventBus.PostAsync(message);
            });
        }