【发布时间】:2015-11-04 22:20:08
【问题描述】:
我在请求-响应模型中遇到 MassTransit 问题(使用 MassTransit.RabbitMQ 3.0.14)。
TLDR;当响应类型为 List/IEnumerable 时,Request-Respond 不起作用。
在客户端我正在创建 IRequestClient 的实例:
var RequestObjects = busControl.CreateRequestClient<MyObjectsRequest, List<MyObject>>(
new Uri(configuration["MassTransit:ServerAddress"] + "/" + configuration["MassTransit:TestQueueName"]),
TimeSpan.FromSeconds(15));
接下来,我调用服务器进行响应:
RequestObjects.Request(new MyObjectsRequest{ Id = 1 });
在服务器端我已经注册了消费者:
public async Task Consume(ConsumeContext<MyObjectRequest> context)
{
var myList = new List<MyObject>
{
new MyObject { Id = 1 },
new MyObject { Id = 2 }
}
context.Respond(myList);
}
问题是响应转到了一些临时的 _skipped 队列(我正在通过 RabbitMQ 的 Web 面板跟踪它)并且我收到 RequestTimeOutException。
我也试过IEnumerable<> - 同样的事情。
事实上,Array<MyObject> 运作良好 - 响应会返回给我的客户。
当我使用 MassTransit 2.x 订阅列表时,AFAIR 运行良好。是否有可能在 MassTransit 3.x 上做同样的事情?
奇怪的是,当我使用 List/IEnumerable 时,消息类型在到达 RabbitMQ 时似乎被删除了:
单个对象发送时messageType的sn-p:
以及发送对象数组时messageType的sn-p:
【问题讨论】:
标签: c# masstransit