示例#1
0
        /// <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);
        }
示例#2
0
 /// <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;
     }));
 }
示例#3
0
        /// <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);
        }
示例#4
0
        /// <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);
        }
示例#5
0
        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();
            }
        }