/// <summary> /// Creates and initializes new persistent delivery handler for the queue /// </summary> /// <param name="builder">Delivery handler builder</param> /// <param name="factory">Creates new persistent delivery handler instance</param> /// <returns></returns> public static async Task <IMessageDeliveryHandler> CreatePersistentDeliveryHandler(this DeliveryHandlerBuilder builder, Func <DatabaseOptions, IPersistentDeliveryHandler> factory) { DatabaseOptions databaseOptions = ConfigurationFactory.Builder.CreateOptions(builder.Queue); IPersistentDeliveryHandler handler = factory(databaseOptions); await handler.Initialize(); builder.OnAfterCompleted(AfterDeliveryHandlerCreated); return(handler); }
/// <summary> /// Creates and returns persistent queue /// </summary> internal static async Task <HorseQueue> CreateQueue(HorseMq mq, string queueName, QueueOptions options, Func <DatabaseOptions, IPersistentDeliveryHandler> factory) { return(await mq.CreateQueue(queueName, options, async builder => { DatabaseOptions databaseOptions = ConfigurationFactory.Builder.CreateOptions(builder.Queue); IPersistentDeliveryHandler handler = factory(databaseOptions); await handler.Initialize(); return handler; })); }
/// <summary> /// Creates new persistent queue /// </summary> /// <param name="mq">Horse MQ Server</param> /// <param name="queueName">Queue name</param> /// <param name="options">Queue Options</param> /// <param name="factory">Delivery handler instance creator factory</param> /// <returns></returns> public static async Task <HorseQueue> CreatePersistentQueue(this HorseMq mq, string queueName, QueueOptions options, Func <DatabaseOptions, IPersistentDeliveryHandler> factory) { HorseQueue queue = await CreateQueue(mq, queueName, options, factory); IPersistentDeliveryHandler deliveryHandler = (IPersistentDeliveryHandler)queue.DeliveryHandler; ConfigurationFactory.Manager.Add(queue, deliveryHandler.DbFilename); ConfigurationFactory.Manager.Save(); return(queue); }
/// <summary> /// Creates new persistent queue /// </summary> /// <param name="mq">Horse MQ Server</param> /// <param name="queueName">Queue name</param> /// <param name="deleteWhen">Decision, when messages will be removed from disk</param> /// <param name="producerAckDecision">Decision, when ack will be sent to producer</param> /// <param name="options">Queue Options</param> /// <returns></returns> public static async Task <HorseQueue> CreatePersistentQueue(this HorseMq mq, string queueName, DeleteWhen deleteWhen, ProducerAckDecision producerAckDecision, QueueOptions options) { HorseQueue queue = await CreateQueue(mq, queueName, deleteWhen, producerAckDecision, options); IPersistentDeliveryHandler deliveryHandler = (IPersistentDeliveryHandler)queue.DeliveryHandler; ConfigurationFactory.Manager.Add(queue, deliveryHandler.DbFilename); ConfigurationFactory.Manager.Save(); return(queue); }
private static void AfterDeliveryHandlerCreated(DeliveryHandlerBuilder builder) { IPersistentDeliveryHandler persistentHandler = builder.Queue.DeliveryHandler as IPersistentDeliveryHandler; if (persistentHandler == null) { return; } bool added = ConfigurationFactory.Manager.Add(builder.Queue, persistentHandler.DbFilename); if (added) { ConfigurationFactory.Manager.Save(); } }