使用MassTransit SendEndpoint发送消息时找不到队列

时间:2019-06-06 18:16:45

标签: c# azureservicebus masstransit

在Azure Service Bus上使用SendEndpoint时,我在应用程序启动时看到以下异常。无法在RabbitMQ上重现该问题;使用Publish()而非Send()时无法在ASB上再现。

Microsoft.Azure.ServiceBus.MessagingEntityNotFoundException: Queue was not found
  at Microsoft.Azure.ServiceBus.Management.QueueDescriptionExtensions.ParseFromContent(String xml) in C:\source\azure-service-bus-dotnet\src\Microsoft.Azure.ServiceBus\Management\QueueDescriptionExtensions.cs:69
  at Microsoft.Azure.ServiceBus.Management.ManagementClient.GetQueueAsync(String queuePath, CancellationToken cancellationToken) in C:\source\azure-service-bus-dotnet\src\Microsoft.Azure.ServiceBus\Management\ManagementClient.cs:198

在堆栈跟踪之后,queueNameGetQueueAsync()中抱怨的是GaldinsMac_dotnet_bus_dpfoyyr5d1ojub5kbdmqijse8g

这是一个简单的控制台应用程序。这是我的代码:

static async Task Main()
{
    var bus = Bus.Factory.CreateUsingAzureServiceBus(sbc =>
    {
        sbc.RequiresSession = false; // doesn't seem to help
        var host = sbc.Host(
            "Endpoint=sb://ns.servicebus.windows.net/;SharedAccessKeyName=localtesting;SharedAccessKey=key", 
            _ => { });
    });

    try
    {
        await bus.StartAsync();
        // the exception is thrown here, but I can still continue and ignore the exception

        var uri = new Uri(bus.Address, "queueName");
        // debugger shows uri to be: sb://ns.servicebus.windows.net/queueName

        var endpoint = await bus.GetSendEndpoint(uri);
        await endpoint.Send(new SayHiCommand(
            name: "Jane Doe"));
    }
    finally
    {
        await bus.StopAsync();
    }
}

该代码适用于RabbitMQ,但不适用于ASB,因此,我确定我在某处缺少某些内容。如果我使用Publish<>()而不是Send<>(),则可以与ASB一起使用,但这不是我想要的。

1 个答案:

答案 0 :(得分:0)

上周发现了这个问题。像克里斯在评论中所说的那样,代码很好。

  1. 带有队列名称的错字。这就解释了为什么它可以与Publish<>()一起使用而不与ISendEndpoint.Send<>()一起使用。之所以可以使用RabbitMQ,是因为使用错字队列名的使用者正在本地运行。
  2. 该异常仅在调试时发生。与Rider的调试器和.NET SDK 2.2.300有关