Пример #1
0
        public void ReadAlias(UriAliasLookup lookups)
        {
            var real = lookups.Resolve(Uri);

            if (real != Uri)
            {
                Alias = Uri;
                Uri   = real;
            }
        }
Пример #2
0
        public void does_not_have_an_alias()
        {
            var uri     = "loopback://one".ToUri();
            var address = new SubscriberAddress(uri);
            var lookups = new UriAliasLookup(new IUriLookup[0]);


            address.ReadAlias(lookups);

            address.Uri.ShouldBe(uri);
            address.Alias.ShouldBeNull();
        }
Пример #3
0
 public ServiceBusActivator(BusSettings settings, IHandlerPipeline pipeline, IDelayedJobProcessor delayedJobs, BusMessageSerializationGraph serialization, IEnumerable <ITransport> transports, UriAliasLookup lookups, IWorkerQueue workerQueue, CompositeLogger logger, IPersistence persistence)
 {
     _settings      = settings;
     _pipeline      = pipeline;
     _delayedJobs   = delayedJobs;
     _serialization = serialization;
     _transports    = transports.ToArray();
     _lookups       = lookups;
     _workerQueue   = workerQueue;
     _logger        = logger;
     _persistence   = persistence;
 }
Пример #4
0
        public async Task applies_lookups_to_senders()
        {
            theSettings.SendTo("fake://one");

            var lookups = new UriAliasLookup(new IUriLookup[0]);

            lookups.SetAlias("fake://one", "tcp://server:2222");

            await theSettings.ApplyLookups(lookups);

            theSettings.KnownSubscribers.Single()
            .Uri.ShouldBe("tcp://server:2222".ToUri());
        }
Пример #5
0
 // TODO -- take in MessagingRoot instead?
 public MessageRouter(MessagingSerializationGraph serializers, IChannelGraph channels,
                      ISubscriptionsRepository subscriptions, HandlerGraph handlers, IMessageLogger logger, UriAliasLookup lookup,
                      MessagingSettings settings)
 {
     _serializers   = serializers;
     _channels      = channels;
     _subscriptions = subscriptions;
     _handlers      = handlers;
     _logger        = logger;
     _lookup        = lookup;
     _settings      = settings;
     _workers       = _settings.Workers;
 }
Пример #6
0
        public EnvelopeSender(CompositeLogger logger, IMessageRouter router, IChannelGraph channels, UriAliasLookup aliases, BusSettings settings, IEnumerable <ITransport> transports)
        {
            _router   = router;
            _channels = channels;
            _aliases  = aliases;
            _settings = settings;

            foreach (var transport in transports)
            {
                _transports.SmartAdd(transport.Protocol, transport);
            }

            Logger = logger;
        }
Пример #7
0
        public void has_an_alias()
        {
            var fake    = "fake://one".ToUri();
            var address = new SubscriberAddress(fake);
            var lookups = new UriAliasLookup(new IUriLookup[0]);

            var real = "real://one".ToUri();

            lookups.SetAlias(fake, real);

            address.ReadAlias(lookups);

            address.Uri.ShouldBe(real);
            address.Alias.ShouldBe(fake);
        }
Пример #8
0
        public async Task applies_lookups_to_listeners_happy_path()
        {
            theSettings.ListenForMessagesFrom("fake://one").MaximumParallelization(3);

            var lookups = new UriAliasLookup(new IUriLookup[0]);

            lookups.SetAlias("fake://one", "tcp://localhost:2222/incoming");



            await theSettings.ApplyLookups(lookups);

            theSettings.Lightweight.Port.ShouldBe(2222);
            theSettings.Lightweight.Queues.Has("incoming").ShouldBeTrue();
            theSettings.Lightweight.Queues["incoming"].Parallelization.ShouldBe(3);
        }
Пример #9
0
        public MessagingRoot(ObjectPoolProvider pooling,
                             MessagingSettings settings,
                             HandlerGraph handlers,
                             Forwarders forwarders,
                             IDurableMessagingFactory factory,
                             IChannelGraph channels,
                             ISubscriptionsRepository subscriptions,
                             IMessageLogger messageLogger,
                             IEnumerable <ISerializerFactory> serializers,
                             IEnumerable <IMessageDeserializer> readers,
                             IEnumerable <IMessageSerializer> writers,
                             ITransport[] transports,
                             IEnumerable <IMissingHandler> missingHandlers,
                             IEnumerable <IUriLookup> lookups, ITransportLogger transportLogger)
        {
            Settings         = settings;
            _handlers        = handlers;
            _transportLogger = transportLogger;
            Replies          = new ReplyWatcher();
            Factory          = factory;
            Channels         = channels;
            Transports       = transports;



            Lookup = new UriAliasLookup(lookups);


            Serialization = new MessagingSerializationGraph(pooling, settings, handlers, forwarders, serializers,
                                                            readers, writers);

            Logger = messageLogger;

            Pipeline = new HandlerPipeline(Serialization, handlers, Replies, Logger, missingHandlers,
                                           this);

            Workers = new WorkerQueue(Logger, Pipeline, settings);

            Router = new MessageRouter(Serialization, channels, subscriptions, handlers, Logger, Lookup, settings);

            // TODO -- ZOMG this is horrible, and I admit it.
            if (Factory is NulloDurableMessagingFactory)
            {
                Factory.As <NulloDurableMessagingFactory>().ScheduledJobs = ScheduledJobs;
            }
        }
Пример #10
0
        public MessagingRoot(
            ObjectPoolProvider pooling,
            BusSettings settings,
            HandlerGraph handlers,
            Forwarders forwarders,
            IPersistence persistence,
            IChannelGraph channels,
            ISubscriptionsRepository subscriptions,
            IEnumerable <ISerializerFactory> serializers,
            IEnumerable <IMessageDeserializer> readers,
            IEnumerable <IMessageSerializer> writers,
            IMessageLogger[] loggers,
            ITransport[] transports,
            IEnumerable <IMissingHandler> missingHandlers,
            IEnumerable <IUriLookup> lookups)
        {
            _settings    = settings;
            _handlers    = handlers;
            _replies     = new ReplyWatcher();
            _persistence = persistence;
            _channels    = channels;
            _transports  = transports;



            Lookup = new UriAliasLookup(lookups);


            Serialization = new BusMessageSerializationGraph(pooling, settings, handlers, forwarders, serializers,
                                                             readers, writers);

            Logger = new CompositeMessageLogger(loggers);

            Pipeline = new HandlerPipeline(Serialization, handlers, _replies, Logger, missingHandlers,
                                           new Lazy <IServiceBus>(Build));

            Workers = new WorkerQueue(Logger, Pipeline, settings);

            Router = new MessageRouter(Serialization, channels, subscriptions, handlers, Logger, Lookup, settings);

            ScheduledJobs = new InMemoryScheduledJobProcessor();
        }
Пример #11
0
        public MessagingRoot(
            MessagingSerializationGraph serialization,
            MessagingSettings settings,
            HandlerGraph handlers,
            IDurableMessagingFactory factory,
            IChannelGraph channels,
            ISubscriptionsRepository subscriptions,
            IMessageLogger messageLogger,
            Lamar.IContainer container,
            ITransportLogger transportLogger)
        {
            Settings         = settings;
            _handlers        = handlers;
            _transportLogger = transportLogger;
            Replies          = new ReplyWatcher();
            Factory          = factory;
            Channels         = channels;
            Transports       = container.QuickBuildAll <ITransport>().ToArray();



            Lookup = new UriAliasLookup(container.QuickBuildAll <IUriLookup>());


            Serialization = serialization;

            Logger = messageLogger;

            Pipeline = new HandlerPipeline(Serialization, handlers, Replies, Logger, container.QuickBuildAll <IMissingHandler>(),
                                           this);

            Workers = new WorkerQueue(Logger, Pipeline, settings);

            Router = new MessageRouter(Serialization, channels, subscriptions, handlers, Logger, Lookup, settings);

            // TODO -- ZOMG this is horrible, and I admit it.
            if (Factory is NulloDurableMessagingFactory f)
            {
                f.ScheduledJobs = ScheduledJobs;
            }
        }
Пример #12
0
        public void Start(IMessagingRoot root, CapabilityGraph capabilities)
        {
            var settings = root.Settings;

            _lookups  = root.Lookup;
            _settings = settings;
            _logger   = root.Logger;
            _root     = root;

            organizeTransports(settings, root.Transports);

            assertNoUnknownTransportsInSubscribers(settings);


            assertNoUnknownTransportsInListeners(settings);

            foreach (var transport in root.Transports)
            {
                transport.StartListening(root);
            }

            if (settings.DefaultChannelAddress != null)
            {
                DefaultChannel = GetOrBuildChannel(settings.DefaultChannelAddress);
            }

            buildInitialSendingAgents(root);



            GetOrBuildChannel(TransportConstants.RetryUri);

            SystemReplyUri =
                capabilities.DefaultReceiverLocation
                ?? tryGetReplyUri("http")
                ?? tryGetReplyUri("tcp")
                ?? _transports.Values.FirstOrDefault(x => x.LocalReplyUri != null)?.LocalReplyUri;
        }
Пример #13
0
        public void Start(BusSettings settings, ITransport[] transports, UriAliasLookup lookups,
                          CapabilityGraph capabilities, CompositeMessageLogger logger, IWorkerQueue workers)
        {
            _lookups  = lookups;
            _settings = settings;
            _logger   = logger;

            organizeTransports(settings, transports);


            if (settings.DefaultChannelAddress != null)
            {
                DefaultChannel = GetOrBuildChannel(settings.DefaultChannelAddress);
            }

            assertNoUnknownTransportsInSubscribers(settings);


            assertNoUnknownTransportsInListeners(settings);

            foreach (var transport in _transports.Values)
            {
                transport.StartListening(settings, workers);
            }

            buildInitialSendingAgents(settings);



            GetOrBuildChannel(TransportConstants.RetryUri);

            SystemReplyUri =
                capabilities.DefaultReceiverLocation
                ?? tryGetReplyUri("http")
                ?? tryGetReplyUri("tcp")
                ?? _transports.Values.FirstOrDefault(x => x.LocalReplyUri != null)?.LocalReplyUri;
        }
Пример #14
0
 public ServiceBusActivator(BusSettings settings, IHandlerPipeline pipeline, IDelayedJobProcessor delayedJobs, SerializationGraph serialization, IEnumerable <ITransport> transports, UriAliasLookup lookups, INodeDiscovery nodes)
 {
     _settings      = settings;
     _pipeline      = pipeline;
     _delayedJobs   = delayedJobs;
     _serialization = serialization;
     _transports    = transports.ToArray();
     _lookups       = lookups;
     _nodes         = nodes;
 }
Пример #15
0
        private async Task <ServiceCapabilities> compile(HandlerGraph handlers, SerializationGraph serialization, IChannelGraph channels, ITransport[] transports, UriAliasLookup lookups, JasperRuntime runtime)
        {
            var validTransports = transports.Select(x => x.Protocol).ToArray();

            var capabilities = new ServiceCapabilities
            {
                ServiceName   = runtime.ServiceName,
                Subscriptions = determineSubscriptions(handlers, serialization),
                Published     = determinePublishedMessages(serialization, runtime, validTransports)
            };

            // Hokey.
            foreach (var subscription in capabilities.Subscriptions)
            {
                subscription.ServiceName = runtime.ServiceName;
            }

            foreach (var message in capabilities.Published)
            {
                message.ServiceName = runtime.ServiceName;
            }

            await capabilities.ApplyLookups(lookups);

            // Now, do some validation
            var missingDestination = capabilities.Subscriptions
                                     .Where(x => x.Destination == null)
                                     .Select(s => $"Could not determine an incoming receiver for message '{s.MessageType}'");


            var invalidTransport = capabilities.Subscriptions
                                   .Where(x => x.Destination != null && !validTransports.Contains(x.Destination.Scheme))
                                   .Select(x => $"Unknown transport '{x.Destination.Scheme}' for subscription to message '{x.MessageType}'");

            var missingHandlers = capabilities.Subscriptions
                                  .Where(x => !handlers.CanHandle(x.DotNetType))
                                  .Select(x => $"No handler for message '{x.MessageType}' referenced in a subscription");

            capabilities.Errors = missingDestination.Concat(invalidTransport).Concat(missingHandlers).ToArray();


            return(capabilities);
        }
Пример #16
0
        public async Task <ServiceCapabilities> Compile(HandlerGraph handlers, SerializationGraph serialization, IChannelGraph channels, JasperRuntime runtime, ITransport[] transports, UriAliasLookup lookups)
        {
            if (runtime.ApplicationAssembly != null)
            {
                var publishedTypes = await TypeRepository.FindTypes(runtime.ApplicationAssembly,
                                                                    TypeClassification.Concretes | TypeClassification.Closed, type => _publishFilters.Any(x => x(type)));

                foreach (var type in publishedTypes)
                {
                    Publish(type);
                }
            }



            var capabilities = await compile(handlers, serialization, channels, transports, lookups, runtime);


            capabilities.ServiceName = runtime.ServiceName;

            return(capabilities);
        }
Пример #17
0
 public MessageRouter(SerializationGraph serializers, IChannelGraph channels, ISubscriptionsRepository subscriptions, HandlerGraph handlers, CompositeLogger logger, UriAliasLookup lookup)
 {
     _serializers   = serializers;
     _channels      = channels;
     _subscriptions = subscriptions;
     _handlers      = handlers;
     _logger        = logger;
     _lookup        = lookup;
 }
Пример #18
0
 public void ReadAlias(UriAliasLookup lookups)
 {
     Uri = lookups.Resolve(Uri);
 }
Пример #19
0
        public EnvelopeSender(CompositeLogger logger, IMessageRouter router, IChannelGraph channels, UriAliasLookup aliases, BusSettings settings)
        {
            _router   = router;
            _channels = channels;
            _aliases  = aliases;
            _settings = settings;

            Logger = logger;
        }