public override async Task StartAsync(CancellationToken cancellationToken) { var db = ConnectionMultiplexer.GetDatabase(_redisConfiguration.DatabaseId); await db.SetAddAsync(RedisQueueConventions.GetSubscriptionKey(AutoMessageMapper.GetQueueName <T>()), _subscription.Name).ConfigureAwait(false); await base.StartAsync(cancellationToken).ConfigureAwait(false); }
public async Task PublishAsync <T>(T message) where T : IRedisEvent { var db = _multiplexer.GetDatabase(_configuration.DatabaseId); var queueName = AutoMessageMapper.GetQueueName <T>(); var subscriptions = await db.SetMembersAsync(RedisQueueConventions.GetSubscriptionKey(queueName)).ConfigureAwait(false); if (subscriptions == null) { return; } await Task.WhenAll(subscriptions.Select(sub => SendAsync(message, RedisQueueConventions.GetSubscriptionQueueName(queueName, sub)))).ConfigureAwait(false); }