Azure 服务总线上的 MT。为什么我看到System.InvalidOperationException。连接关闭时无法创建会话?

问题描述 投票:0回答:1

我使用的是MT 5.5.6 & Azure Service Bus。

我的所有服务偶尔会收到以下异常。

System.InvalidOperationException: Can't create session when the connection is closing.
at Microsoft.Azure.ServiceBus.Core.MessageReceiver.OnReceiveAsync(Int32 maxMessageCount, TimeSpan serverWaitTime)

大多数情况下,一切都按预期工作,但偶尔我也会收到异常。我没有使用ASB的session功能。

我有一个简单的配置,用于从存储库中接收大型消息数据。

    x.AddBus(context => Bus.Factory.CreateUsingAzureServiceBus(sbc =>
    {
        var componentContext = context.Resolve<IComponentContext>();
        var host = sbc.Host(new Uri(_appSettings.GetSection("Azure")["ServiceBusUri"]), h =>
        {
            h.SharedAccessSignature(s =>
            {
                s.KeyName = _appSettings.GetSection("Azure")["ServiceBusKeyName"];
                s.SharedAccessKey = _appSettings.GetSection("Azure")["SharedAccessKey"];
                s.TokenTimeToLive = TimeSpan.FromDays(1);
                s.TokenScope = TokenScope.Namespace;
            });
        });

        sbc.ReceiveEndpoint(host, _appSettings.GetSection("Azure")["ReceiveQueue"], ep =>
        {
            ep.PrefetchCount = 16;
            ep.Consumer<BatchDocumentPresentedConsumer>(componentContext);
            ep.UseMessageData<BatchDocumentReceived>(componentContext.Resolve<IMessageDataRepository>());
        });

        sbc.UseSerilog();
    }));
});

这是来自ASB的队列细节(使用Get-AzServiceBusQueue)。

Name                                : filter
LockDuration                        : PT5M
AccessedAt                          : 11/05/2020 06:24:18
AutoDeleteOnIdle                    : P427D
CreatedAt                           : 12/03/2020 06:22:23
DefaultMessageTimeToLive            : P366D
DuplicateDetectionHistoryTimeWindow : PT10M
DeadLetteringOnMessageExpiration    : True
EnableExpress                       : False
EnablePartitioning                  : False
MaxDeliveryCount                    : 5
MaxSizeInMegabytes                  : 1024
MessageCount                        : 0
CountDetails                        : Microsoft.Azure.Management.ServiceBus.Models.MessageCountDetails
RequiresDuplicateDetection          : False
RequiresSession                     : False
SizeInBytes                         : 0
Status                              : Active
UpdatedAt                           : 12/03/2020 06:22:23
ForwardTo                           :
ForwardDeadLetteredMessagesTo       :
EnableBatchedOperations             : True

为什么我会看到这个异常?会不会是因为ASB不可用?

azureservicebus masstransit
1个回答
1
投票

我相信在那个版本的MassTransit中,当应用程序和Azure服务总线之间的连接中断时,存在这样的问题:它会回收连接,然后重新启动所有消费者。然而,当连接表示停止时,消费者并没有正确地退出循环,因此接收器会尝试重新启动,但却失败了。

所以,你的最后一个问题,关于ASB不可用的问题,很可能是连接被中断了,或者AMQP插座因为任何原因被断开了(瞬时故障是会发生的),这是在消费者的重新连接重启过程中抛出的。

© www.soinside.com 2019 - 2024. All rights reserved.