Ejemplo n.º 1
0
        public LightRailServiceBus(LightRailConfiguration config, IMessageMapper mapper, MessageHandlerCollection messageHandlers, IDictionary <Type, string> staticRoutes)
        {
            this.ServiceLocator    = config.ServiceLocator;
            this.MessageSerializer = config.MessageSerializerConstructor();
            this.MessageMapper     = mapper;
            this.MessageHandlers   = messageHandlers;

            this.messageHandlerPipelinedBehaviors = config.PipelinedBehaviors.ToList();
            // ensure MessageHandlerDispatchBehavior is added to the end
            this.messageHandlerPipelinedBehaviors.RemoveAll(x => x is MessageHandlerDispatchBehavior);
            this.messageHandlerPipelinedBehaviors.Add(new MessageHandlerDispatchBehavior());
            this.compiledMessagePipeline = PipelinedBehavior.CompileMessageHandlerPipeline(this.messageHandlerPipelinedBehaviors);
            this.staticRoutes            = staticRoutes;
            this.SubscriptionStorage     = config.SubscriptionStorage;

            this.Transport = config.TransportConstructor();
            this.Transport.MessageAvailable      += (sender, messageAvailable) => OnMessageAvailable(messageAvailable);
            this.Transport.PoisonMessageDetected += (sender, poisonMessageDetected) => OnPoisonMessageDetected(poisonMessageDetected);

            this.startupActions.Add(() => this.Transport.Start());
            if (config.SubscriptionMapping.Any())
            {
                this.startupActions.Add(() =>
                {
                    if (this.SubscriptionStorage == null)
                    {
                        throw new InvalidConfigurationException("SubscriptionStorage is required when setting up subscriptions.");
                    }
                    foreach (var messageType in config.SubscriptionMapping)
                    {
                        if (config.MessageTypeConventions.IsMessageType(messageType))
                        {
                            this.SubscriptionStorage.Subscribe(this.Transport.OriginatingAddress, new[] { messageType.FullName });
                        }
                    }
                });
            }
        }
Ejemplo n.º 2
0
 public void AddPipelinedBehavior(PipelinedBehavior behavior)
 {
     this.PipelinedBehaviors.Add(behavior);
 }