public PushForwardQueueClient(PushForwardClient client, QueueClient queueClient, QueueInfo queueInfo, PushForwardConfig config) { QueueInfo = queueInfo; _client = client; _queueClient = queueClient; _config = config; }
public async Task <PushForwardQueueClient> PushQueue(string name, PushForwardConfig config = null) { LazyInitializer.EnsureInitialized(ref config, () => new PushForwardConfig { PushType = PushStyle.Multicast, Retries = 3, RetryDelay = TimeSpan.FromSeconds(60), ErrorQueueName = string.Format("{0}_Errors", name) }); QueueClient queueClient = IronMqClient.Queue(name); QueueInfo queueInfo = await queueClient.Info(); bool requiresPushTypeUpdate = QueueInfoHelper.RequiresPushTypeUpdate(queueInfo, config.PushType); bool requiresErrorQueueUpdate = QueueInfoHelper.RequiresErrorQueueUpdate(queueInfo, config); bool requiresRetryUpdate = QueueInfoHelper.RequiresRetryUpdate(queueInfo, config); bool requiresRetryDelayUpdate = QueueInfoHelper.RequiresRetryDelayUpdate(queueInfo, config); var update = new QueueInfo(); bool shouldUpdate = false; if (requiresErrorQueueUpdate) { shouldUpdate = true; update.ErrorQueue = config.ErrorQueueName; } if (requiresRetryUpdate) { shouldUpdate = true; update.Retries = config.Retries; } if (requiresRetryDelayUpdate) { shouldUpdate = true; update.RetriesDelay = config.RetryDelay.GetValueOrDefault().Seconds; } if (requiresPushTypeUpdate) { shouldUpdate = true; } if (shouldUpdate) { // You should always specify the PushType when calling Update update.PushType = config.GetPushType(); queueInfo = await queueClient.Update(update); } return(new PushForwardQueueClient(this, queueClient, queueInfo, config)); }
public static bool RequiresErrorQueueUpdate(QueueInfo queueInfo, PushForwardConfig config) { if (String.IsNullOrEmpty(config.ErrorQueueName)) { return(false); } return(!String.Equals(queueInfo.ErrorQueue, config.ErrorQueueName)); }
public static bool RequiresRetryDelayUpdate(QueueInfo queueInfo, PushForwardConfig config) { if (config.Retries == null) { return(false); } return(queueInfo.Retries != config.Retries.Value); }
public async Task <PushForwardQueueClient> PushQueue <T>(PushForwardConfig config = null) { return(await PushQueue(QueueNameAttribute.GetName <T>(), config)); }