2017-03-22 2 views
0

MassTransit에 다음 코드로 메시지를 보내지 않는 문제가 있습니다 -이 메시지는 Azure 서비스 버스 코드에서 잘 작동하는 포트입니다. GitHub의 예제는 Queue - Starbucks 예제를 채워서 인프라가 작동하고 있습니다.MassTransit이 메시지를 보내지 않음 - RabbitMQ

아무도 메시지를 보내지 않는 이유를 제안 할 수 있습니까? 나는 대기열과 교환을 모두 만들었고 시도하지 않았다.

콘솔 앱이 예상 한 결과를 인쇄합니다.

미리 감사드립니다.

public class Program 
    { 
     static void Main() 
     { 
      IBusControl busControl = CreateBus(); 

      TaskUtil.Await(() => busControl.StartAsync()); 

      List<Task> tList = new List<Task>(); 
      for (int i = 0; i < 10; i++) 
      { 
       var t = Send(busControl); 
       tList.Add(t); 
      } 
      Task.WaitAll(tList.ToArray()); 
      Console.WriteLine("done!"); 
     } 

     private static async Task Send(IBusControl busControl) 
     { 
      var endpoint = await busControl.GetSendEndpoint(new Uri("rabbitmq://localhost/test")); 

      Console.WriteLine("Sending"); 

      await endpoint.Send(new SomethingHappenedMessage() 
      { 
       What = "Stuff", 
       When = DateTime.Now 
      }); 

      Console.WriteLine("Sent"); 
     } 

     static IBusControl CreateBus() 
     { 
      return Bus.Factory.CreateUsingRabbitMq(x => x.Host(new Uri("rabbitmq://localhost"), h => 
      { 
       h.Username("guest"); 
       h.Password("guest"); 
      })); 
     } 
} 

public interface SomethingHappened 
    { 
     string What { get; } 
     DateTime When { get; } 
    } 

    public class SomethingHappenedMessage : SomethingHappened 
    { 
     public string What { get; set; } 
     public DateTime When { get; set; } 
    } 
+0

'test' 교환은'test' 대기열에 묶여 있습니까? –

+0

열려있는 모든 파이프 라인의 실행을 끝내기 위해 버스를 끝까지 추가 할 것입니다. –

+0

Chris, 대기열 바인딩이 작동했습니다. 고맙습니다. 저는 RabbitMQ를 처음 사용합니다. 이것은 왜 Starbucks 샘플이 상자 밖으로 나왔는지 설명하지 않습니다 - 저는 이것이 MassTransit 2.0이라고 생각합니다. 당신이 대답하면 나는 그것을 정확하게 표시 할 것입니다. 다시 한번 감사드립니다. – KnowHoper

답변

2

RabbitMQ를 사용하여 MassTransit으로 메시지를 보내면 기본적으로 대기열에 대한 바인딩이 만들어지지 않습니다. 서비스의 수신 엔드 포인트가 큐 및 관련 바인딩을 작성한다고 가정합니다.

rabbitmq://localhost/vhost/exchange_name?bind=true&queue=queue_name 

a의 경우 엔드 포인트를받을 수는 아래 그림과 같이

는 메시지를 전송하면, 당신은 몇 가지 추가 쿼리 문자열 매개 변수를 포함하는 엔드 포인트 주소를 수정할 수 있습니다 때 큐와 바인딩이 존재하는지 확인하려면 교환 이름과 대기열 이름은 동일합니다.

관련 문제