Очередь не найдена при использовании MassTransit SendEndpoint для отправки сообщения - PullRequest
0 голосов
/ 06 июня 2019

Я вижу следующее исключение при запуске приложения при использовании SendEndpoint в Azure Service Bus. Невозможно воспроизвести проблему на RabbitMQ; невозможно воспроизвести на ASB при использовании Publish() вместо Send().

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

После следа стека queueName, на который он жалуется в GetQueueAsync(), равен 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, поэтому я уверен, что где-то что-то упустил. Работает с ASB, если я использую Publish<>() вместо Send<>(), но это не то, что я хочу здесь.

1 Ответ

0 голосов
/ 13 июня 2019

Понял это на прошлой неделе. Код в порядке, как сказал Крис в комментариях.

  1. Глупая опечатка с именем очереди. Что объясняет, почему он работал с Publish<>(), но не с ISendEndpoint.Send<>(). Он работал с RabbitMQ, потому что потребитель с опечатанным именем очереди работал локально.
  2. Исключение возникает только при отладке. Что-то делать с отладчиком Rider и .NET SDK 2.2.300
...