如何解决如何在 MassTransit 中单独配置请求超时和/或消息 TTL?
我的目标是使从 API Gateway 到微服务的请求-响应。我希望请求是持久的(不过期),但响应应该过期(如果没有消费者会在 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);
但是这些选项都不起作用。静态消息具有默认的 30 秒 TTL。
- 为什么它没有按预期工作?这里的消息 TTL 与 RequestTimeout 有什么不同吗?如果是,那为什么是 30 多岁?
- 我是否必须手动配置消息 TTL?
- 我希望请求客户端在 30 秒后自动超时,即使请求消息永不过期。这是内置的,还是我必须为超时编写一些自定义代码,或者如果我将过期的 CancellationToken 传递给 .getResponse() 就足够了?
解决方法
您可以在注册请求客户端时配置默认超时时间:
cfg.AddRequestClient<ICreateGroupPayload>(RequestTimeout.After(s:20));
然后,在发送请求时,您可以使用消息初始值设定项中的标头覆盖 TimeToLive:
var response = await _createGroupClient.GetResponse<ICreateGroupResult>(new
{
Name = payload.Name,Description = payload.Description,__TimeToLive = TimeSpan.FromYears(1)
},httpContext.CancellationToken);
这会将默认值(默认情况下与请求超时匹配)替换为新值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。