【发布时间】:2021-04-21 18:01:40
【问题描述】:
我的目标是从 API 网关到微服务的请求-响应。我希望请求是持久的(不会过期),但响应应该过期(如果没有消费者在 30 秒内收到响应,那么它应该过期)。我在 API GW 请求处理程序(请求范围)中使用 RequestClient。默认情况下,MassTransit 将超时设置为 30 秒,然后从队列中删除请求。它位于 MassTransit 代码中:https://github.com/MassTransit/MassTransit/blob/5e2a416384f005c392ead139f5c4af34511c56db/src/MassTransit/RequestTimeout.cs#L7。
首先我尝试像这样在我的请求客户端中设置超时 (使用 RabbitMQ):
// on request client level
cfg.AddRequestClient<ICreateGroupPayload>(RequestTimeout.None);
// and/or
// on .GetResponse() level
var response = await _createGroupClient.GetResponse<ICreateGroupResult>(new
{
Name = payload.Name,
Description = payload.Description
}, new CancellationToken(), RequestTimeout.None);
但是这些选项都不起作用。静态消息的 TTL 默认为 30 秒。
- 为什么它不能按预期工作?这里的消息 TTL 与 RequestTimeout 有什么不同吗?如果是,那为什么是 30 多岁?
- 在我的情况下是否必须手动配置消息 TTL?
- 我希望请求客户端在 30 秒后自动超时,即使请求消息永不过期。这是内置的,还是我必须为超时编写一些自定义代码,或者如果我将过期的 CancellationToken 传递给 .getResponse() 就足够了?
【问题讨论】:
标签: masstransit