Использование ReplyTo с MassTransit - PullRequest
0 голосов
/ 28 мая 2019

Использование 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 . Однако саги настойчивы, и я не собираюсь ничего упорствовать. Я просто хочу, чтобы отправитель дождался нескольких ответов.

...