Masstransit消费者在.NET 4.8 Topshelf仅在可执行文件中工作,不在服务中
发布时间:2022-04-09 10:52:53 378
相关标签:
我们需要将Masstransit RabbitMQ使用者托管在.NET 4.8 Windows服务。
我们使用依赖注入和Topshelf来运行、安装和启动服务。
将消费者作为Windows*运行.exe工作正常:收到消息。
但从Log4Net日志中可以看出,作为Windows服务启动时,不会收到任何消息。
这是使用Topshelf的Main()方法,通过注入日志和配置来启动MassTransitRunner实例:
var massTransitRunner = new MassTransitRunner(_logger, _config, args);
_ = HostFactory.Run(x =>
{
x.Service(s =>
{
s.ConstructUsing(runner => massTransitRunner);
s.WhenStarted(runner => runner.Start());
s.WhenStopped(runner => runner.Stop());
});
x.RunAsNetworkService();
x.SetServiceName(nameof(RuleEngineCommandConsumer));
x.SetDisplayName("_RuleEngine-CommandConsumer");
x.SetDescription("Processes Commands with Results to trigger Transitions");
});
这是传递给Topshelf的MassTransitRunner类的Start()方法:
public void Start() {
try
{
_logger.LogInformation("Starting...");
var hostBuilder = _args.CreateMassTransitHostBuilder(null, null, Program.ConfigureServices, Assembly.GetExecutingAssembly());
_host = hostBuilder.UseWindowsService().Build();
_task = _host.StartAsync(_Cancellation.Token);
//_host.Start();
//_host.RunAsync(_Cancellation.Token);
//await _task; => stopped without Starting
_logger.LogInformation("Started");
}
catch (Exception e)
{
_logger.LogError(e, "Starting...");
}
}
正如你所见,我们尝试了不同的方法来启动主机,但只有StartAsync起作用。
完整的示例项目可以在Github中查看
非常感谢您的帮助!
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报