示例#1
0
        public override string ToTransportAddress(QueueAddress address)
        {
            var baseAddress = address.BaseAddress;

            PathChecker.ThrowForBadPath(baseAddress, "endpoint name");

            var discriminator = address.Discriminator;

            if (!string.IsNullOrEmpty(discriminator))
            {
                PathChecker.ThrowForBadPath(discriminator, "endpoint discriminator");

                baseAddress += "-" + discriminator;
            }

            var qualifier = address.Qualifier;

            if (!string.IsNullOrEmpty(qualifier))
            {
                PathChecker.ThrowForBadPath(qualifier, "address qualifier");

                baseAddress += "-" + qualifier;
            }

            return(baseAddress);
        }
示例#2
0
        public override string ToTransportAddress(LogicalAddress logicalAddress)
        {
            var address = logicalAddress.EndpointInstance.Endpoint;

            PathChecker.ThrowForBadPath(address, "endpoint name");

            var discriminator = logicalAddress.EndpointInstance.Discriminator;

            if (!string.IsNullOrEmpty(discriminator))
            {
                PathChecker.ThrowForBadPath(discriminator, "endpoint discriminator");

                address += "-" + discriminator;
            }

            var qualifier = logicalAddress.Qualifier;

            if (!string.IsNullOrEmpty(qualifier))
            {
                PathChecker.ThrowForBadPath(qualifier, "address qualifier");

                address += "-" + qualifier;
            }

            return(address);
        }
        public Task Init(Func <MessageContext, Task> onMessage, Func <ErrorContext, Task <ErrorHandleResult> > onError, CriticalError criticalError, PushSettings settings)
        {
            this.onMessage     = onMessage;
            this.onError       = onError;
            this.criticalError = criticalError;

            transactionMode = settings.RequiredTransactionMode;

            PathChecker.ThrowForBadPath(settings.InputQueue, "InputQueue");

            messagePumpBasePath = Path.Combine(basePath, settings.InputQueue);
            bodyDir             = Path.Combine(messagePumpBasePath, BodyDirName);
            delayedDir          = Path.Combine(messagePumpBasePath, DelayedDirName);

            pendingTransactionDir   = Path.Combine(messagePumpBasePath, PendingDirName);
            committedTransactionDir = Path.Combine(messagePumpBasePath, CommittedDirName);

            if (settings.PurgeOnStartup)
            {
                if (Directory.Exists(messagePumpBasePath))
                {
                    Directory.Delete(messagePumpBasePath, true);
                }
            }

            delayedMessagePoller = new DelayedMessagePoller(messagePumpBasePath, delayedDir);

            return(Task.CompletedTask);
        }
        /// <summary>
        /// Configures the location where message files are stored.
        /// </summary>
        /// <param name="transportExtensions">The transport extensions to extend.</param>
        /// <param name="path">The storage path.</param>
        public static void StorageDirectory(this TransportExtensions <AcceptanceTestTransport> transportExtensions, string path)
        {
            Guard.AgainstNullAndEmpty(nameof(path), path);
            Guard.AgainstNull(nameof(transportExtensions), transportExtensions);
            PathChecker.ThrowForBadPath(path, "StorageDirectory");

            transportExtensions.GetSettings().Set(AcceptanceTestTransportInfrastructure.StorageLocationKey, path);
        }
示例#5
0
        Task DispatchUnicast(IEnumerable <UnicastTransportOperation> operations, TransportTransaction transaction)
        {
            return(Task.WhenAll(operations.Select(operation =>
            {
                PathChecker.ThrowForBadPath(operation.Destination, "message destination");

                return WriteMessage(operation.Destination, operation, transaction);
            })));
        }
示例#6
0
        /// <summary>
        /// Configures a custom path where host diagnostics is written.
        /// </summary>
        /// <param name="config">Configuration object to extend.</param>
        /// <param name="path">The custom path to use.</param>
        public static void SetDiagnosticsPath(this EndpointConfiguration config, string path)
        {
            Guard.AgainstNull(nameof(config), config);
            Guard.AgainstNullAndEmpty(nameof(path), path);

            PathChecker.ThrowForBadPath(path, "Diagnostics root path");

            config.GetSettings().Get <HostingComponent.Configuration>().DiagnosticsPath = path;
        }
        public AcceptanceTestTransportInfrastructure(SettingsHolder settings)
        {
            this.settings = settings;
            if (!settings.TryGet(StorageLocationKey, out storagePath))
            {
                storagePath = FindStoragePath();
            }

            var errorQueueAddress = settings.ErrorQueueAddress();

            PathChecker.ThrowForBadPath(errorQueueAddress, "ErrorQueueAddress");
        }
示例#8
0
        public override TransportSubscriptionInfrastructure ConfigureSubscriptionInfrastructure()
        {
            return(new TransportSubscriptionInfrastructure(() =>
            {
                var endpointName = settings.EndpointName();
                PathChecker.ThrowForBadPath(endpointName, "endpoint name");

                var localAddress = settings.LocalAddress();
                PathChecker.ThrowForBadPath(localAddress, "localAddress");

                return new LearningTransportSubscriptionManager(storagePath, endpointName, localAddress);
            }));
        }
        public LearningTransportInfrastructure(SettingsHolder settings)
        {
            this.settings = settings;
            if (!settings.TryGet(StorageLocationKey, out storagePath))
            {
                storagePath = FindStoragePath();
            }

            if (settings.TryGet <ReceiveComponent.Settings>(out var receiveSettings))
            {
                receiveSettings.SetDefaultPushRuntimeSettings(new PushRuntimeSettings(1));
            }

            var errorQueueAddress = settings.ErrorQueueAddress();

            PathChecker.ThrowForBadPath(errorQueueAddress, "ErrorQueueAddress");
        }
        public LearningTransportInfrastructure(SettingsHolder settings)
        {
            this.settings = settings;
            if (!settings.TryGet(StorageLocationKey, out storagePath))
            {
                storagePath = FindStoragePath();
            }

            settings.SetDefault(new MessageProcessingOptimizationExtensions.ConcurrencyLimit
            {
                MaxValue = 1
            });

            var errorQueueAddress = settings.ErrorQueueAddress();

            PathChecker.ThrowForBadPath(errorQueueAddress, "ErrorQueueAddress");
        }
        public IMessageReceiver CreateReceiver(ReceiveSettings receiveSettings)
        {
            var errorQueueAddress = receiveSettings.ErrorQueue;

            PathChecker.ThrowForBadPath(errorQueueAddress, "ErrorQueueAddress");

            PathChecker.ThrowForBadPath(settings.Name, "endpoint name");

            ISubscriptionManager subscriptionManager = null;

            if (receiveSettings.UsePublishSubscribe)
            {
                subscriptionManager = new LearningTransportSubscriptionManager(storagePath, settings.Name, receiveSettings.ReceiveAddress);
            }
            var pump = new LearningTransportMessagePump(receiveSettings.Id, storagePath, settings.CriticalErrorAction, subscriptionManager, receiveSettings, transport.TransportTransactionMode);

            return(pump);
        }
        public TestTransportInfrastructure(SettingsHolder settings)
        {
            this.settings = settings;

            if (!settings.TryGet(StorageLocationKey, out storagePath))
            {
                var solutionRoot = FindSolutionRoot();
                storagePath = Path.Combine(solutionRoot, ".learningtransport");
            }

            var errorQueueAddress = settings.ErrorQueueAddress();

            PathChecker.ThrowForBadPath(errorQueueAddress, "ErrorQueueAddress");

            OutboundRoutingPolicy = settings.GetOrDefault <bool>(NoNativePubSub)
                ? new OutboundRoutingPolicy(OutboundRoutingType.Unicast, OutboundRoutingType.Unicast, OutboundRoutingType.Unicast)
                : new OutboundRoutingPolicy(OutboundRoutingType.Unicast, OutboundRoutingType.Multicast, OutboundRoutingType.Unicast);
        }
示例#13
0
        Task DispatchUnicast(IEnumerable <UnicastTransportOperation> operations, TransportTransaction transaction)
        {
            return(Task.WhenAll(operations.Select(operation =>
            {
                PathChecker.ThrowForBadPath(operation.Destination, "message destination");

                if (!operation.Message.Headers.TryGetValue(Headers.MessageId, out var messageId))
                {
                    messageId = operation.Message.MessageId;
                }

                if (!operation.Message.Headers.TryGetValue(Headers.MessageIntent, out var intent))
                {
                    intent = "<Unknown>";
                }
                Console.WriteLine($"Sending message {messageId} with intent {intent} sent to {operation.Destination}");

                return WriteMessage(operation.Destination, operation, transaction);
            })));
        }
        public void Init()
        {
            PathChecker.ThrowForBadPath(receiveSettings.ReceiveAddress, "InputQueue");

            messagePumpBasePath = Path.Combine(basePath, receiveSettings.ReceiveAddress);
            bodyDir             = Path.Combine(messagePumpBasePath, BodyDirName);
            delayedDir          = Path.Combine(messagePumpBasePath, DelayedDirName);

            pendingTransactionDir   = Path.Combine(messagePumpBasePath, PendingDirName);
            committedTransactionDir = Path.Combine(messagePumpBasePath, CommittedDirName);

            if (receiveSettings.PurgeOnStartup)
            {
                if (Directory.Exists(messagePumpBasePath))
                {
                    Directory.Delete(messagePumpBasePath, true);
                }
            }

            delayedMessagePoller = new DelayedMessagePoller(messagePumpBasePath, delayedDir);
        }
示例#15
0
        public LearningTransportInfrastructure(SettingsHolder settings)
        {
            this.settings = settings;

            if (!settings.TryGet(StorageLocationKey, out storagePath))
            {
                var solutionRoot = FindSolutionRoot();
                storagePath = Path.Combine(solutionRoot, ".learningtransport");
            }

            settings.SetDefault <MessageProcessingOptimizationExtensions.ConcurrencyLimit>(new MessageProcessingOptimizationExtensions.ConcurrencyLimit
            {
                MaxValue = 1
            });

            var errorQueueAddress = settings.ErrorQueueAddress();

            PathChecker.ThrowForBadPath(errorQueueAddress, "ErrorQueueAddress");

            settings.Set(Recoverability.DisableLegacyRetriesSatellite, true);
        }
        /// <summary>
        /// Configures the location where message files are stored.
        /// </summary>
        /// <param name="transportExtensions">The transport extensions to extend.</param>
        /// <param name="path">The storage path.</param>
        public static void StorageDirectory(this TransportExtensions <TestTransport> transportExtensions, string path)
        {
            PathChecker.ThrowForBadPath(path, "StorageDirectory");

            transportExtensions.GetSettings().Set(TestTransportInfrastructure.StorageLocationKey, path);
        }