2016-07-28 13 views
0

Ich versuche, MassTransit zu lernen. Ich habe MassTransit.RabbitMQ Version 3.3.5 über NuGet installiert. Ich habe bereits Erlang 18.0 * und RabbitMQ 3.6.3 installiert (* Erlang Version 19.0 ist instabil mit RabbitMQ 3.6.3). Ich fand einen "schnellen Start" MassTransit-Programm here, und nach der Reparatur ein wenig Typo, habe es kompilieren. Jedoch, wenn ich das Programm ausführe, wird die veröffentlichte Nachricht "YourMessage" nicht vom Handler gehandhabt! Die Benutzeroberfläche des RabbitMQ-Verwaltungs-Plugins zeigt an, dass es eine Warteschlange "test_queue" mit einer Nachricht gibt. Und dort bleibt es unbearbeitet. Was geht hier vor sich? Ich verwende Windows 7 und der RabbitMQ-Dienst läuft.MassTransit Quick Start App funktioniert nicht

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(); 
     } 
    } 
} 

Antwort

0

lief ich Ihren Code und habe es funktioniert, indem der von Endpunktcode ersetzt:

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

... an folgende ...

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

sehen, ob das funktioniert für dich?

(RabbitMQ: 3.6.2/Erlang: OTP 18)

+0

Danke für die Antwort, aber Ihr Code hat nichts geändert, außer für den Stil des lambda-Ausdrucks, der den Handler ausmacht; es funktioniert immer noch nicht. – Andy

0

Es scheint, dass der bus.Stop() -Aufruf auf meiner Maschine zu schnell gemacht wird. Wenn ich im Folgenden zwischen .Publish und .Stop hinzufüge, wird die Nachricht empfangen. Ohne diesen Code wird die veröffentlichte Nachricht jedoch nicht verbraucht.

Console.WriteLine("Press any key to exit"); 
Console.ReadKey();