我们有两个服务通过RabbitMQ之上的MassTransit交换消息。 目标是以请求/响应方式发送消息。这是收听消息的服务代码,我们称之为 Service1 :
Bus.Factory.CreateUsingRabbitMq(
sbc =>
{
var host = sbc.Host(new Uri($"rabbitmq://{RabbitMqHost}"), h =>
{
h.ConfigureRabbitMq();//Custom extension to specify credentials
});
sbc.ReceiveEndpoint(host, "CUSTOM_QUEUE_NAME", ep =>
{
ep.Exclusive = false;
ep.AutoDelete = true;
ep.Durable = false;
ep.PrefetchCount = 1;
ep.Handler<EngineStartingMessage>(async context =>
{
//SourceAddress and ResponseAddress are auto generated queues
//Message processing is done here
context.Respond(response);
});
});
});
发送消息并处理结果的服务代码,我们称之为 Service2 :
var requestClient =
new MessageRequestClient<EngineStartingMessage, EngineStartingResponse>(
EntityServiceBus,
new Uri("CUSTOM_QUEUE_NAME?durable=false&autodelete=true&exclusive=false"),
new TimeSpan(0, 0, 30));
var engineStartResponse = requestClient.Request(new EngineStartingMessage() { Version = SystemVersion }).Result;
当我运行上述代码时,我可以看到 Service1 收到请求并调用context.Respond(response);
,但在 Service2 方面,我总是会收到超时异常。因为,消息可以从 Service2 到 Service1 ,我认为没有与网络相关的问题。超时也非常高。 Service1 结束时的消息处理时间不到一秒。所以我认为响应消息没有正确路由,我不明白为什么。我可疑的是 SourceAddress 和 ResponseAddress 包含自动生成的值,而不是"CUSTOM_QUEUE_NAME?durable=false&autodelete=true&exclusive=false"
。我有什么想法吗?