【问题标题】:Why is "await Publish<T>" hanging / not completing / not finishing为什么“等待发布<T>”挂起/未完成/未完成
【发布时间】:2019-03-08 15:23:30
【问题描述】:

以下代码已经运行了一段时间,突然停止返回:

await availableChangedPublishEndpoint
   .Publish<IAvailableStockChanged>(
        AvailableStockCounter.ConvertSkuQtyToAvailableStockChangedEvent(
            newAvailable,
            absMessage.Warehouse)
        );

ConvertSkuQtyToAvailableStockChangedEvent 没有什么聪明之处——它只是将一个简单的类映射到另一个类。

我们在这段代码之前和之后添加了日志,它肯定只是在这一点上停止。其他系统发布正常,其他消息正在从该应用程序发送(例如,日志实际上是通过 RabbitMQ 发送的)。我们已经重新部署并升级到最新的 MassTransit 版本。我们看到消息正在被发布 - 可能多次发布,但这个 Publish 方法永远不会返回。

【问题讨论】:

    标签: rabbitmq masstransit


    【解决方案1】:

    我们有一个损坏的 RabbitMQ 节点,并且在一个节点上重新启动干净的服务修复了它。我理解这种行为可能有其他原因,但这是我们的问题。

    systemctl restart rabbitmq-server

    进一步查看 RabbitMQ,我们发现连接到此交换的一些 队列没有同步(见下文),当我们尝试同步它们时,它们不起作用。 p>

    我们也无法删除其中一些不同步的队列。

    我们认为其中一个节点的意外关闭导致了此问题 - 但它使大多数队列/交换完全正常。

    【讨论】:

    • 您如何处理重置 RMQ 上的所有绑定?我们想移动所有消息类型(合同),但我们担心所有绑定都会损坏。
    • 我们不必重置任何绑定 - 我们确实删除了几个连接到此交换的空未同步队列,因为我们认为这可能会解决问题,因为当我们重新启动 MassTransit 时会重新创建需要这些队列的应用程序 - 但实际上其中一个拒绝删除(它使管理界面崩溃,选项卡停止响应非常困难),这就是我们重新启动节点的时候。
    • @Ozkan 如果这不能回答您的问题,您能否就 SO 提出更详细的问题并链接到它?
    猜你喜欢
    • 2015-01-07
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 2019-12-18
    相关资源
    最近更新 更多