2016-01-27 5 views
1

Для тестирования запроса/ответа саги с помощью masstransit я создал консольное приложение для запуска саги, отправив сообщение на шине (RabbitMQ).Почему мой почтовый автобус не создает временную очередь?

В соответствии с documentation консольное приложение не должно иметь никаких конечных точек, определенных для получения ответа.

создать шину с помощью следующего кода:

  context.Bus = Bus.Factory.CreateUsingRabbitMq(x => 
     { 
      IRabbitMqHost host = x.Host(new Uri(ConfigurationManager.AppSettings["RabbitMQHost"]), h => 
      { 
       h.Username("guest"); 
       h.Password("guest"); 
      }); 
     }); 

При выполнении приведенного выше кода, я не вижу никаких обменов или временную очередь создается.

Отправка запроса приведет к выполнению саги, но ответы никогда не вернутся к исходному отправителю, и будет выведено исключение таймаута.

Отправка запроса:

public async Task Test(TestContext context) 
    { 
     var triggerRequestMessage = JsonConvert.DeserializeObject<TriggerRequestMessage>Messages.MFAMessages.ValidMessage); 

     var client = CreateRequestClient(context); 
     var response = await client.Request(triggerRequestMessage); 
     Logger.Log("Result: PublishMFAMessage"); 
    } 

    IRequestClient<TriggerRequestMessage, ResponseMessage> CreateRequestClient(TestContext context) 
    { 
     var serviceAddress = new Uri("rabbitmq://localhost/MTTest/SAGAS_AUTHBOLTON"); 
     var client = context.Bus.CreateRequestClient<TriggerRequestMessage, ResponseMessage>(serviceAddress, TimeSpan.FromSeconds(10)); 

     return client; 
    } 

Что я делаю неправильно? Почему временное не создается?

+0

Вы связываете ли вы потребителей? Ничего не происходит, пока кто-то не прислушивается к сообщению. – Travis

+0

Привет @travis tnx за ваш ответ. В соответствии с документацией, которая не нужна: если вам нужно отправлять или публиковать сообщения, ** не создавать конечные точки приема **. Шина ** автоматически создаст временную очередь ** для шины, которая может использоваться для публикации событий, а также для отправки команд и ведения запросов/ответов. Временное создание не создается. –

+0

Эта услуга может не связывать пользователей, но вам нужно что-то слушать. Так слушает другое служение? Это слушатель, который связывает все вещи вместе. – Travis

ответ

3

Причина, по которой вышеуказанный код не создавал какого-либо частного потребителя, состоял в том, что я не запускал автобус. duhhh !!

Код, который отсутствовал:

context.Bus.Start(); 

@travis спасибо за помощь!

+2

Также не забудьте вызвать Stop, когда ваш процесс завершается, или вы можете оставить какое-то фоновое поведение незавершенным! –