在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
在堆栈跟踪之后,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,因此,我确定我在某处缺少某些内容。如果我使用Publish<>()
而不是Send<>()
,则可以与ASB一起使用,但这不是我想要的。
答案 0 :(得分:0)
上周发现了这个问题。像克里斯在评论中所说的那样,代码很好。
Publish<>()
一起使用而不与ISendEndpoint.Send<>()
一起使用。之所以可以使用RabbitMQ,是因为使用错字队列名的使用者正在本地运行。