Использование RabbitMQ; Я могу реализовать шаблон типа Scatter Gather следующим образом:
//Publisher
List<string> responses = new List<string>();
string rpcResponseQueue = channel.QueueDeclare().QueueName;
string correlationId = Guid.NewGuid().ToString();
IBasicProperties basicProperties = channel.CreateBasicProperties();
basicProperties.ReplyTo = rpcResponseQueue;
и
_consumer.Received += (model, ea) =>
{
var body = ea.Body;
var message2 = Encoding.UTF8.GetString(body);
var response = JsonConvert.DeserializeObject<TResponse>(message2);
responses.Add(response);
if (responses.Count >= 2)
{
if (!callbackMapper.TryRemove(ea.BasicProperties.CorrelationId, out TaskCompletionSource<IEnumerable<TResponse>> tcs))
return;
tcs.TrySetResult(responses);
}
else
return;
};
//Consumer
channel.BasicPublish("", basicDeliveryEventArgs.BasicProperties.ReplyTo, replyBasicProperties, responseBytes);
Вот код от моего издателя Mass Transit:
rabbitBusControl.Publish<IRegisterCustomer>(new
{
Address = "New Street",
Id = Guid.NewGuid(),
Preferred = true,
RegisteredUtc = DateTime.UtcNow,
Name = "Nice people LTD",
Type = 1,
DefaultDiscount = 0
});
Есть ли у MassTransit что-то похожее на ReplyTo? Я потратил много часов на изучение этого вопроса и прочитал о Sagas, например. здесь: Как реализовать сагу с использованием шаблона разброса / сбора В MassTransit 3.0 . Однако саги настойчивы, и я не собираюсь ничего упорствовать. Я просто хочу, чтобы отправитель дождался нескольких ответов.