public RoutingInfoPublisher(RoutingInfoCommunicator dataBackplane, IReadOnlyCollection <Type> hanledMessageTypes, IReadOnlyCollection <Type> publishedMessageTypes, ReadOnlySettings settings, TimeSpan heartbeatPeriod) { this.dataBackplane = dataBackplane; this.hanledMessageTypes = hanledMessageTypes; this.publishedMessageTypes = publishedMessageTypes; this.settings = settings; this.heartbeatPeriod = heartbeatPeriod; }
protected override void Setup(FeatureConfigurationContext context) { var settings = context.Settings; var conventions = settings.Get <Conventions>(); var uniqueKey = settings.InstanceSpecificQueue() ?? settings.LocalAddress(); var unicastRoutingTable = settings.Get <UnicastRoutingTable>(); var endpointInstances = settings.Get <EndpointInstances>(); var publishers = settings.Get <Publishers>(); var connectionString = settings.Get <string>("NServiceBus.AutomaticRouting.ConnectionString"); var messageTypesPublished = settings.Get <Type[]>("NServiceBus.AutomaticRouting.PublishedTypes"); #region Feature // Create the infrastructure var dataAccess = new SqlDataAccess(uniqueKey, connectionString); var communicator = new RoutingInfoCommunicator(dataAccess); context.RegisterStartupTask(communicator); // Register the routing info publisher context.RegisterStartupTask(builder => { var handlerRegistry = builder.Build <MessageHandlerRegistry>(); var messageTypesHandled = GetHandledMessages(handlerRegistry, conventions); return(new RoutingInfoPublisher( dataBackplane: communicator, hanledMessageTypes: messageTypesHandled, publishedMessageTypes: messageTypesPublished, settings: settings, heartbeatPeriod: TimeSpan.FromSeconds(5))); }); // Register the routing info subscriber context.RegisterStartupTask(builder => { var handlerRegistry = builder.Build <MessageHandlerRegistry>(); var messageTypesHandled = GetHandledMessages(handlerRegistry, conventions); var subscriber = new RoutingInfoSubscriber( routingTable: unicastRoutingTable, endpointInstances: endpointInstances, messageTypesHandledByThisEndpoint: messageTypesHandled, publishers: publishers, sweepPeriod: TimeSpan.FromSeconds(5), heartbeatTimeout: TimeSpan.FromSeconds(20)); communicator.Changed = subscriber.OnChanged; communicator.Removed = subscriber.OnRemoved; return(subscriber); }); context.Pipeline.Register( stepId: "VerifyAdvertisedBehavior", behavior: new VerifyAdvertisedBehavior(messageTypesPublished), description: "Verifies if all published types has been advertised."); #endregion }