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); }
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); }
/// <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); }
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; }
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")); } }