Azure functions MassTransit RespondAsync()引发Microsoft.Azure.ServiceBus.MessaginEntityNotFoundException

Azure functions MassTransit RespondAsync()引发Microsoft.Azure.ServiceBus.MessaginEntityNotFoundException,azure-functions,azureservicebus,masstransit,Azure Functions,Azureservicebus,Masstransit,具有以下启动配置的Web API: services.AddMassTransit( x => { x.AddBus(provider => this.CreateBus(provider)); string queueName = settings.InputQueueName; var serviceBusUri = new Uri($"{settings.ServiceBusUri}/{queueName}"); Comm

具有以下启动配置的Web API:

services.AddMassTransit(
 x =>
 {
    x.AddBus(provider => this.CreateBus(provider));
    string queueName = settings.InputQueueName;
    var serviceBusUri = new Uri($"{settings.ServiceBusUri}/{queueName}");
    CommandEndpointConvention.MapAll(serviceBusUri);
    x.AddRequestClient<CreateThingCommand>(serviceBusUri);
});
每次,
RespondAsync
行都会抛出以下异常

Microsoft.Azure.ServiceBus.MessagingEntityNotFoundException: 'Put token failed. status-code: 404, status-description: The messaging entity 'sb://dev-xxxxx-bus.servicebus.windows.net/DESKTOPXXYYZZ_iisexpress_bus_xrsyyydbnyyx9a4pbdcxkg6udd' could not be found. To know more visit https://aka.ms/sbResourceMgrExceptions
我希望响应消息被放入
输入队列
并传递给调用者

我做错了什么

respondsync
行上有一些
context

我无法在服务总线资源管理器中观察临时队列的创建


抛出
MessaginEntityNotFoundException
后,
GetResponse
调用最终在30秒后超时,表明它仍在范围内和侦听中运行。

使用请求客户端时,responseAddress设置为总线端点的地址,这是一个临时的自动删除队列。请求客户端在发送请求时将响应/故障处理程序动态连接到总线端点,并在
GetResponse
完成后断开这些处理程序的连接

另一点是,您可以通过使用为服务端点轻松创建目标地址。例如:

x.AddRequestClient(新Uri($“队列:{queueName}”);

如果
RespondAsync
抛出一个
EntityNotFoundException
,则可以安全地说原始请求客户端不再连接/侦听响应。

不要忘记启动总线

bus.StartAsync()

MassTransit使用一个临时的非持久队列,并有一个消费者 处理回应。仅配置和创建此临时队列 当你开车的时候。如果你忘了在家里启动公共汽车 应用程序代码,请求客户端将失败并超时,等待 请回答

在我的例子中,不启动总线并没有阻止创建
输入队列
,而是导致不创建临时的自动删除响应队列


Thaks@Chris Patterson为我指出了正确的方向。

谢谢你的回复。在抛出
MessaginEntityNotFoundException
并继续执行之后,
GetResponse
调用在30秒后超时,这表示请求客户端仍在范围内并正在侦听。我已打开ServiceBusExplorer,并且从未观察到正在创建临时队列。好像根本没有创建队列。用服务总线浏览器的屏幕截图更新了问题。啊,是的。或者使用
AddMassTransitThoStedService
为您执行此操作:)不过,听起来您的AddMassTransitForazuRefunnctions工作正常,这很好。
var busResponse = await this.requestClient.GetResponse<CommandResponse>(command);
 await context.RespondAsync(response);
Microsoft.Azure.ServiceBus.MessagingEntityNotFoundException: 'Put token failed. status-code: 404, status-description: The messaging entity 'sb://dev-xxxxx-bus.servicebus.windows.net/DESKTOPXXYYZZ_iisexpress_bus_xrsyyydbnyyx9a4pbdcxkg6udd' could not be found. To know more visit https://aka.ms/sbResourceMgrExceptions