【问题标题】:MassTransit trying to connect to RabbitMQ infinitely when it is downMassTransit 在关闭时尝试无限连接到 RabbitMQ
【发布时间】:2020-10-24 09:03:57
【问题描述】:

当 RabbitMQ 关闭时,默认情况下(我认为)Masstransit 尝试无限连接并收到“RabbitMQ Connect Failed: Broker unreachable: guest@localhost:5672/”错误。

Masstransit 在 RabbitMQ 启动后立即开始工作。无论如何我们可以设置重试次数的限制吗?所以 Masstransit 将停止重试连接 RabbitMQ。

【问题讨论】:

    标签: c# .net-core rabbitmq microservices masstransit


    【解决方案1】:

    要限制连接到 RabbitMQ 所花费的时间,请将 CancellationToken 传递给 StartAsync 方法。

    using var source = new CancellationTokenSource(TimeSpan.FromSeconds(30));
    
    await bus.StartAsync(source.Token);
    

    【讨论】:

    • 谢谢克里斯,它似乎正在解决问题。我在一个单独的库中托管服务并从控制台调用。我们可以从控制台传递取消令牌而不是在库中硬编码吗? public class MTHostedService : IHostedService { } public async Task StartAsync(CancellationToken cancellationToken) {}
    • 如果您使用的是 IHostedService,我不确定 CancellationToken 来自哪里,但您当然可以使用它。
    • 你认为我不应该在 StartAsync 方法上有 CancellationToken 输入参数,因为如果我使用 IHostedService,它会被默认调用?或者当我使用 IHostedService 时还有其他方法可以调用 StartAsync 方法吗?
    • 我不明白你的评论。如果您有 IHostedService,ASP.NET Core 将使用取消令牌调用该 StartAsync 方法。将该取消令牌传递给 MassTransit 的 StartAsync 方法。
    • 我的 StartAsync 方法有输入参数 cancelToken 并且没有使用,而是使用了 source.Token。` public async Task StartAsync(CancellationToken cancelToken) { using var source = new CancellationTokenSource(TimeSpan.FromSeconds(30) );等待总线.StartAsync(source.Token); } . I understand that we can create a linked token source like 使用 var linkedTokenSource =CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, source.Token);等待总线.StartAsync(linkedTokenSource.Token);`。我希望它应该是这样工作的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 2022-08-17
    • 2016-11-20
    • 2021-04-19
    • 2020-11-14
    • 2019-01-29
    • 2015-04-07
    相关资源
    最近更新 更多