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> >()); }); }
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); }); }