ServiceBase.RequestAdditionalTime() from NServiceBus.Host



我们有一个NServiceBus Windows服务,在启动时需要一段时间来注册模块。我们希望从服务管理器请求额外的时间来正常启动。对于不使用NServiceBus的服务,这将使用ServiceBase.RequestAdditionalTime完成。如何使用NServiceBus.Host来完成?

我们最终删除了NServiceBus。主机和使用Topshelf代替。注意服务启动时需要额外的配置。

public static void Main(string[] args)
{
    HostFactory.Run(hf =>
    {
        hf.Service<MailboxListenerService>(svc =>
        {
            svc.ConstructUsing(mls => new MailboxListenerService());
            svc.WhenStarted((mls, control) => mls.Start(control));
            svc.WhenStopped(mls => mls.Stop());
        });
    });
}
public class MailboxListenerService
{
    private RunWebApi _webApiRunner;
    public MailboxListenerService()
    {
    }
    public bool Start(HostControl hostControl)
    {
        hostControl.RequestAdditionalTime(TimeSpan.FromSeconds(60));
        var kernel = new StandardKernel(new MailboxListenerModule());
        Configure.With()
            .DefineEndpointName("my.endpoint.name")
            .DefiningEventsAs(t => typeof(Messaging.Markers.IEvent).IsAssignableFrom(t))
            .Log4Net<NlogAppenderForLog4Net>(a => { })
            .NinjectBuilder(kernel)
            .MsmqTransport()
                .MsmqSubscriptionStorage("my.subscription.storage")
            .DisableTimeoutManager()
            .DisableSecondLevelRetries()
            .UnicastBus()
            .ImpersonateSender(false);
        _webApiRunner = kernel.Get<RunWebApi>();
        _webApiRunner.Run();
        return true;
    }
    public void Stop()
    {
        _webApiRunner.Stop();
    }
}

不幸的是,我们已经打开了一个问题,以支持在未来的版本

https://github.com/NServiceBus/NServiceBus/issues/1046

一种解决方法是使用注册表 增加服务的超时时间。http://support.microsoft.com/kb/824344

相关内容

  • 没有找到相关文章

最新更新