Exemplo n.º 1
0
        public override void Initialize()
        {
            NServiceBus.Configure.Component <CorrelationIdMutatorForBackwardsCompatibilityWithV3>(DependencyLifecycle.InstancePerCall);
            NServiceBus.Configure.Component <MsmqUnitOfWork>(DependencyLifecycle.SingleInstance);
            NServiceBus.Configure.Component <MsmqDequeueStrategy>(DependencyLifecycle.InstancePerCall)
            .ConfigureProperty(p => p.PurgeOnStartup, ConfigurePurging.PurgeRequested);

            var cfg = NServiceBus.Configure.GetConfigSection <MsmqMessageQueueConfig>();

            var settings = new MsmqSettings();

            if (cfg != null)
            {
                settings.UseJournalQueue    = cfg.UseJournalQueue;
                settings.UseDeadLetterQueue = cfg.UseDeadLetterQueue;

                Logger.Warn(Message);
            }
            else
            {
                var connectionString = SettingsHolder.Get <string>("NServiceBus.Transport.ConnectionString");

                if (connectionString != null)
                {
                    settings = new MsmqConnectionStringBuilder(connectionString).RetrieveSettings();
                }
            }

            NServiceBus.Configure.Component <MsmqMessageSender>(DependencyLifecycle.InstancePerCall)
            .ConfigureProperty(t => t.Settings, settings);

            NServiceBus.Configure.Component <MsmqQueueCreator>(DependencyLifecycle.InstancePerCall)
            .ConfigureProperty(t => t.Settings, settings);
        }
Exemplo n.º 2
0
        public MsmqSettings RetrieveSettings()
        {
            var settings = new MsmqSettings();

            if (ContainsKey("deadLetter"))
            {
                settings.UseDeadLetterQueue = bool.Parse((string)this["deadLetter"]);
            }

            if (ContainsKey("journal"))
            {
                settings.UseJournalQueue = bool.Parse((string)this["journal"]);
            }

            if (ContainsKey("cacheSendConnection"))
            {
                settings.UseConnectionCache = bool.Parse((string)this["cacheSendConnection"]);
            }

            if (ContainsKey("useTransactionalQueues"))
            {
                settings.UseTransactionalQueues = bool.Parse((string)this["useTransactionalQueues"]);
            }


            return(settings);
        }
        /// <summary>
        /// Initializes a new instance of <see cref="ConfigureTransport"/>.
        /// </summary>
        protected override void Configure(FeatureConfigurationContext context, string connectionString)
        {
            new CheckMachineNameForComplianceWithDtcLimitation()
            .Check();
            context.Container.ConfigureComponent<CorrelationIdMutatorForBackwardsCompatibilityWithV3>(DependencyLifecycle.InstancePerCall);
            context.Container.ConfigureComponent<MsmqUnitOfWork>(DependencyLifecycle.SingleInstance);
            context.Container.ConfigureComponent<MsmqDequeueStrategy>(DependencyLifecycle.InstancePerCall);

            var cfg = context.Settings.GetConfigSection<MsmqMessageQueueConfig>();

            var settings = new MsmqSettings();
            if (cfg != null)
            {
                settings.UseJournalQueue = cfg.UseJournalQueue;
                settings.UseDeadLetterQueue = cfg.UseDeadLetterQueue;

                Logger.Warn(Message);
            }
            else
            {
                if (connectionString != null)
                {
                    settings = new MsmqConnectionStringBuilder(connectionString).RetrieveSettings();
                }
            }

            context.Container.ConfigureComponent<MsmqMessageSender>(DependencyLifecycle.InstancePerCall)
                .ConfigureProperty(t => t.Settings, settings)
                .ConfigureProperty(t => t.SuppressDistributedTransactions, context.Settings.Get<bool>("Transactions.SuppressDistributedTransactions"));

            context.Container.ConfigureComponent<MsmqQueueCreator>(DependencyLifecycle.InstancePerCall)
                .ConfigureProperty(t => t.Settings, settings);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Initializes a new instance of <see cref="ConfigureTransport"/>.
        /// </summary>
        protected override void Configure(FeatureConfigurationContext context, string connectionString)
        {
            new CheckMachineNameForComplianceWithDtcLimitation()
            .Check();
            context.Container.ConfigureComponent <CorrelationIdMutatorForBackwardsCompatibilityWithV3>(DependencyLifecycle.InstancePerCall);
            context.Container.ConfigureComponent <MsmqUnitOfWork>(DependencyLifecycle.SingleInstance);
            context.Container.ConfigureComponent <MsmqDequeueStrategy>(DependencyLifecycle.InstancePerCall);

            var cfg = context.Settings.GetConfigSection <MsmqMessageQueueConfig>();

            var settings = new MsmqSettings();

            if (cfg != null)
            {
                settings.UseJournalQueue    = cfg.UseJournalQueue;
                settings.UseDeadLetterQueue = cfg.UseDeadLetterQueue;

                Logger.Warn(Message);
            }
            else
            {
                if (connectionString != null)
                {
                    settings = new MsmqConnectionStringBuilder(connectionString).RetrieveSettings();
                }
            }

            context.Container.ConfigureComponent <MsmqMessageSender>(DependencyLifecycle.InstancePerCall)
            .ConfigureProperty(t => t.Settings, settings)
            .ConfigureProperty(t => t.SuppressDistributedTransactions, context.Settings.Get <bool>("Transactions.SuppressDistributedTransactions"));

            context.Container.ConfigureComponent <MsmqQueueCreator>(DependencyLifecycle.InstancePerCall)
            .ConfigureProperty(t => t.Settings, settings);
        }
        public void Should_allow_optin_for_dlq_on_ttbr_messages()
        {
            var settings = new MsmqSettings
            {
                UseDeadLetterQueueForMessagesWithTimeToBeReceived = true
            };

            var dispatchedMessage = DispatchMessage("dlqOnForTTBR", settings, new DiscardIfNotReceivedBefore(TimeSpan.FromMinutes(10)));

            Assert.True(dispatchedMessage.UseDeadLetterQueue);
        }
        static Message DispatchMessage(string queueName, MsmqSettings settings = null, DeliveryConstraint deliveryConstraint = null, Func <IReadOnlyDictionary <string, string>, string> messageLabelGenerator = null)
        {
            if (settings == null)
            {
                settings = new MsmqSettings(null);
            }

            if (messageLabelGenerator == null)
            {
                messageLabelGenerator = _ => string.Empty;
            }

            settings.LabelGenerator = messageLabelGenerator;

            var path = $@".\private$\{queueName}";

            try
            {
                MsmqHelpers.DeleteQueue(path);
                MsmqHelpers.CreateQueue(path);

                var messageSender = new MsmqMessageDispatcher(settings);

                var bytes = new byte[]
                {
                    1
                };
                var headers             = new Dictionary <string, string>();
                var outgoingMessage     = new OutgoingMessage("1", headers, bytes);
                var deliveryConstraints = new List <DeliveryConstraint>();

                if (deliveryConstraint != null)
                {
                    deliveryConstraints.Add(deliveryConstraint);
                }

                var transportOperation = new TransportOperation(outgoingMessage, new UnicastAddressTag(queueName), DispatchConsistency.Default, deliveryConstraints);

                messageSender.Dispatch(new TransportOperations(transportOperation), new TransportTransaction(), new ContextBag());

                using (var queue = new MessageQueue(path))
                    using (var message = queue.Receive(TimeSpan.FromSeconds(5)))
                    {
                        return(message);
                    }
            }
            finally
            {
                MsmqHelpers.DeleteQueue(path);
            }
        }
        protected override void Setup(FeatureConfigurationContext context)
        {
            var configuredQueueName = DetermineStorageQueueName(context.Settings);

            context.Settings.Get <QueueBindings>().BindSending(configuredQueueName);

            var msmqSettings = new MsmqSettings(context.Settings);

            context.Container.ConfigureComponent(b =>
            {
                var queue = new MsmqSubscriptionStorageQueue(MsmqAddress.Parse(configuredQueueName), msmqSettings.UseTransactionalQueues);
                return(new MsmqSubscriptionStorage(queue));
            }, DependencyLifecycle.SingleInstance);
        }
Exemplo n.º 8
0
        public MsmqSettings RetrieveSettings()
        {
            var settings = new MsmqSettings();

            if (ContainsKey("deadLetter"))
                settings.UseDeadLetterQueue = bool.Parse((string)this["deadLetter"]);

            if (ContainsKey("journal"))
                settings.UseJournalQueue = bool.Parse((string) this["journal"]);

            if (ContainsKey("cacheSendConnection"))
                settings.UseConnectionCache = bool.Parse((string)this["cacheSendConnection"]);

            if (ContainsKey("useTransactionalQueues"))
                settings.UseTransactionalQueues = bool.Parse((string)this["useTransactionalQueues"]);

            return settings;
        }
Exemplo n.º 9
0
 public override void Init()
 {
     base.Init();
     this._producers    = new Hashtable();
     this._consumers    = new Hashtable();
     this._msmqSettings = base.DestinationSettings.MsmqSettings;
     if (this._msmqSettings != null)
     {
         MessageQueue.EnableConnectionCache = false;
         log.Debug(__Res.GetString("Msmq_StartQueue", new object[] { this._msmqSettings.Name }));
         this._messageQueue = new MessageQueue(this._msmqSettings.Name);
         string formatter = "BinaryMessageFormatter";
         if ((this._msmqSettings.Formatter != null) && (this._msmqSettings.Formatter != string.Empty))
         {
             formatter = this._msmqSettings.Formatter;
         }
         log.Debug(__Res.GetString("Msmq_InitFormatter", new object[] { formatter }));
         if (formatter == "BinaryMessageFormatter")
         {
             this._messageFormatter       = new BinaryMessageFormatter();
             this._messageQueue.Formatter = this._messageFormatter;
         }
         else if (formatter.StartsWith("XmlMessageFormatter"))
         {
             string[] strArray    = formatter.Split(new char[] { ';' });
             Type[]   targetTypes = null;
             if (strArray.Length == 1)
             {
                 targetTypes = new Type[] { typeof(string) };
             }
             else
             {
                 targetTypes = new Type[strArray.Length - 1];
                 for (int i = 1; i < strArray.Length; i++)
                 {
                     Type type = ObjectFactory.Locate(strArray[i]);
                     if (type != null)
                     {
                         targetTypes[i - 1] = type;
                     }
                     else
                     {
                         log.Error(__Res.GetString("Type_InitError", new object[] { strArray[i] }));
                     }
                 }
             }
             this._messageFormatter       = new XmlMessageFormatter(targetTypes);
             this._messageQueue.Formatter = this._messageFormatter;
         }
         else
         {
             log.Error(__Res.GetString("Type_InitError", new object[] { formatter }));
             this._messageQueue.Close();
             this._messageQueue = null;
         }
     }
     else
     {
         log.Error(__Res.GetString("ServiceAdapter_MissingSettings"));
     }
 }