Particular / NServiceBus.Host

https://docs.particular.net/nservicebus/hosting/nservicebus-host/
Other
6 stars 18 forks source link

Service installation starts FeatureStartupTasks #100

Open timbussmann opened 8 years ago

timbussmann commented 8 years ago

When installing an endpoint as a service, it will active all features and start their startup tasks. This may lead to issues which shouldn't occur on installation time (e.g. the Heartbeats plugin which starts sending heartbeat messages or even throws an exception when SC isn't configured properly).

It seems like FeatureStartupTasks should not be started when installing a service?

This is an exception during installation we received from a user using RabbitMQ as an example of potential issues when running FST during installation. Behavior may differ from transport to transport.

2016-08-17 12:22:42,512 WARN : Unable to send heartbeat to ServiceControl:
NServiceBus.Unicast.Queuing.QueueNotFoundException: Exchange for the recipient does not exist ---> RabbitMQ.Client.Exceptions.AlreadyClosedException: Already closed: The AMQP operation was in
terrupted: AMQP close-reason, initiated by Peer, code=404, text="NOT_FOUND - no exchange 'Particular.ServiceControl' in vhost '/'", classId=60, methodId=40, cause=
   at RabbitMQ.Client.Impl.ModelBase.WaitForConfirms(TimeSpan timeout, Boolean& timedOut)
   at RabbitMQ.Client.Impl.ModelBase.WaitForConfirmsOrDie(TimeSpan timeout)
   at NServiceBus.Transports.RabbitMQ.ConfirmsAwareChannel.Dispose() in C:\BuildAgent\work\ef98ad7376e3379a\src\NServiceBus.RabbitMQ\ConfirmsAwareChannel.cs:line 31
   --- End of inner exception stack trace ---
   at NServiceBus.Transports.RabbitMQ.ConfirmsAwareChannel.Dispose() in C:\BuildAgent\work\ef98ad7376e3379a\src\NServiceBus.RabbitMQ\ConfirmsAwareChannel.cs:line 47
   at NServiceBus.Transports.RabbitMQ.RabbitMqMessageSender.Send(TransportMessage message, SendOptions sendOptions) in C:\BuildAgent\work\ef98ad7376e3379a\src\NServiceBus.RabbitMQ\RabbitMqMes
sageSender.cs:line 34
   at ServiceControl.Plugin.ServiceControlBackend.Send(Object messageToSend, TimeSpan timeToBeReceived) in C:\Build\src\ServiceControl.Plugin.Nsb5.Heartbeat\ServiceControlBackend.cs:line 52
   at ServiceControl.Plugin.Nsb5.Heartbeat.Heartbeats.SendHeartbeatMessage(HostInformation hostInfo) in C:\Build\src\ServiceControl.Plugin.Nsb5.Heartbeat\Heartbeats.cs:line 118
2016-08-17 12:22:42,512 WARN : Unable to register endpoint startup with ServiceControl. Going to reattempt registration after 00:01:00.
NServiceBus.Unicast.Queuing.QueueNotFoundException: Exchange for the recipient does not exist ---> RabbitMQ.Client.Exceptions.AlreadyClosedException: Already closed: The AMQP operation was in
terrupted: AMQP close-reason, initiated by Peer, code=404, text="NOT_FOUND - no exchange 'Particular.ServiceControl' in vhost '/'", classId=60, methodId=40, cause=
   at RabbitMQ.Client.Impl.ModelBase.WaitForConfirms(TimeSpan timeout, Boolean& timedOut)
   at RabbitMQ.Client.Impl.ModelBase.WaitForConfirmsOrDie(TimeSpan timeout)
   at NServiceBus.Transports.RabbitMQ.ConfirmsAwareChannel.Dispose() in C:\BuildAgent\work\ef98ad7376e3379a\src\NServiceBus.RabbitMQ\ConfirmsAwareChannel.cs:line 31
   --- End of inner exception stack trace ---
   at NServiceBus.Transports.RabbitMQ.ConfirmsAwareChannel.Dispose() in C:\BuildAgent\work\ef98ad7376e3379a\src\NServiceBus.RabbitMQ\ConfirmsAwareChannel.cs:line 47
   at NServiceBus.Transports.RabbitMQ.RabbitMqMessageSender.Send(TransportMessage message, SendOptions sendOptions) in C:\BuildAgent\work\ef98ad7376e3379a\src\NServiceBus.RabbitMQ\RabbitMqMes
sageSender.cs:line 34
   at ServiceControl.Plugin.ServiceControlBackend.Send(Object messageToSend, TimeSpan timeToBeReceived) in C:\Build\src\ServiceControl.Plugin.Nsb5.Heartbeat\ServiceControlBackend.cs:line 52
   at ServiceControl.Plugin.Nsb5.Heartbeat.Heartbeats.SendEndpointStartupMessage(HostInformation hostInfo, DateTime startupTime, CancellationToken cancellationToken) in C:\Build\src\ServiceCo
ntrol.Plugin.Nsb5.Heartbeat\Heartbeats.cs:line 86
danielmarbach commented 8 years ago

Install should only create an endpoint but not start it. Creating an endpoint should not start the features. Let me investigate

danielmarbach commented 8 years ago

Sorry I overlooked that this is a v5 issue. My statement above was related to v6.