2016-07-28 2 views
0

MassTransit을 배우려고합니다. NuGet을 통해 MassTransit.RabbitMQ 버전 3.3.5를 설치했습니다. 이미 Erlang 18.0 *과 RabbitMQ 3.6.3을 설치했습니다 (Erlang 버전 19.0은 RabbitMQ 3.6.3과 불안정합니다). 나는 "빠른 시작"MassTransit 프로그램 here을 발견했고, 작은 typeo를 수정 한 후에 컴파일하도록했습니다. 그러나 프로그램을 실행하면 "YourMessage"라는 게시 된 메시지가 처리기에서 처리되지 않습니다. RabbitMQ 관리 플러그인 UI는 메시지가 1 개있는 "test_queue"대기열이 있음을 보여줍니다. 그리고 거기에는 그것이 처리되지 않은 상태로 남아 있습니다. 여기서 무슨 일이 일어나고있는거야? Windows 7에서 실행 중이며 RabbitMQ 서비스가 실행 중입니다. 그것이 작동하는 경우 MassTransit 빠른 시작 응용 프로그램이 작동하지 않습니다.

sbc.ReceiveEndpoint(host, "test_queue", ep => 
{ 
    ep.Handler<YourMessage>(context => 
     Console.Out.WriteLineAsync($"Received: {context.Message.Text}")); 
    }); 
} 

는보기 ... 다음에 ...

sbc.ReceiveEndpoint(host, "test_queue", ep => 
{ 
    ep.Handler<YourMessage>(context => 
    { 
     return Console.Out.WriteLineAsync($"Received: {context.Message.Text}"); 
    }); 
}); 

:

using MassTransit; 
using System; 

namespace MassTransitPOC.Trivial 
{ 
    public class YourMessage 
    { 
     public string Text { get; set; } 
    } 

    public class Program 
    { 
     public static void Main() 
     { 
      var bus = Bus.Factory.CreateUsingRabbitMq(sbc => 
      { 
       var host = sbc.Host(new Uri("rabbitmq://localhost"), h => 
       { 
        h.Username("guest"); 
        h.Password("guest"); 
       }); 

       sbc.ReceiveEndpoint(host, "test_queue", ep => 
       { 
        ep.Handler<YourMessage>(context => 
        { 
         return Console.Out.WriteLineAsync($"Received: {context.Message.Text}"); 
        }); 
       }); 
      }); 

      bus.Start(); 

      bus.Publish(new YourMessage { Text = "Hi" }); 

      bus.Stop(); 
     } 
    } 
} 

답변

0

나는 코드를 실행하고이에서 엔드 포인트 코드를받을 교체하여 그것을 가지고 너를 위해서?

(RabbitMQ : 3.6.2/얼랑 : OTP 18)

+0

답장을 보내 주셔서 감사합니다.하지만 코드는 핸들러를 구성하는 llambda 표현식의 스타일을 제외하고는 아무 것도 변경하지 않았습니다. 여전히 작동하지 않습니다. – Andy

0

bus.Stop() 호출 내 컴퓨터에 너무 빨리 이루어지고 것 같다. .Publish와 .Stop 사이에 다음을 추가하면 메시지가 수신됩니다. 이 코드가 없으면 게시 된 메시지는 소비되지 않습니다.

Console.WriteLine("Press any key to exit"); 
Console.ReadKey(); 
관련 문제