Azure functions MassTransit RespondAsync()引发Microsoft.Azure.ServiceBus.MessaginEntityNotFoundException
具有以下启动配置的Web API: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
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