2013-03-18 6 views
9

Próbuję uzyskać moja głowa wokół MassTransit i RabbitMQ i kolejkowanie (dzień 1)Newbie - Czy kolejce konsumentów niezbędne dla wydawnictwa do pracy w MassTransit

Mam pytanie jest, czy jest to „Consumer konieczne aby kolejkowanie działało w MT. Pytam, ponieważ najpierw utworzyłem Domain and Producer, ale nie widziałem żadnego kolejki w oknie zarządzania RabbitMQ. "

Po utworzeniu kolejki konsumenta widzę komunikat czekający w kolejce.

Na podstawie mojego zrozumienia, producent nigdy nie zna konsumenta, więc dlaczego MassTransit wymagał kolejki konsumenta, aby rozpocząć publikowanie wiadomości?

Producent

using MassTransit; 

namespace Producer 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Bus.Initialize(sbc => 
      { 
       sbc.UseRabbitMq();   //1 
       sbc.UseControlBus(); 
       sbc.EnableMessageTracing(); 
       sbc.EnableRemoteIntrospection(); 
       sbc.ReceiveFrom("rabbitmq://localhost/MT.Producer"); 
       sbc.UseControlBus(); 
      }); 

      Bus.Instance.Publish(new NewOrderMessage { OrderName = "Hello World" }); 
     } 
    } 
} 

Aplikacja

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using MassTransit; 
using Topshelf; 

namespace Consumer 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Bus.Initialize(sbc => 
      { 
       sbc.UseRabbitMq(); 
       sbc.UseRabbitMqRouting(); 
       sbc.ReceiveFrom("rabbitmq://localhost/MT.ConsumerService"); 
      }); 

      var cfg = HostFactory.New(c => 
      { 
       c.SetServiceName("MT.ConsumerService"); 
       c.SetDisplayName("MT.ConsumerService"); 
       c.SetDescription("MT.ConsumerService"); 

       //c.BeforeStartingServices(s => {}); 

       c.Service<ConsumerService>(a => 
       { 
        a.ConstructUsing(service => new ConsumerService()); 
        a.WhenStarted(o => o.Start()); 
        a.WhenStopped(o => o.Stop()); 
       }); 

      }); 

      try 
      { 
       cfg.Run(); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.Message); 
       throw; 
      } 
     } 
    } 
} 

Przesłanie

namespace Domain 
{ 
    public class NewOrderMessage 
    { 
     public NewOrderMessage() 
     { 
      OrderId = Guid.NewGuid(); 
     } 
     public Guid OrderId { get; set; } 
     public string OrderName { get; set; } 
    } 
} 

Th E Serwis Consumer kod

namespace Consumer 
{ 
    class ConsumerService 
    { 
     readonly IServiceBus _bus; 

     public ConsumerService() 
     { 
      _bus = Bus.Instance; 
     } 

     public void Start() 
     { 
      _bus.SubscribeHandler<NewOrderMessage>(CreateOrder); 

      Console.WriteLine("Starting...."); 
     } 

     public void Stop() 
     {  
      Console.WriteLine("Stopping...."); 
     } 

     public void CreateOrder(NewOrderMessage command) 
     { 
      Console.WriteLine("Creating Order: {0} with Id: {1}", command.OrderName, command.OrderId); 
     } 
    } 
} 

został stworzony za pomocą przykładów sieci.

Edit Pragnie również dodać, że wszystkie przestrzenie nazw są różne projekty domenę Producent Consumer

Pozdrowienia,

Mar

+0

Właśnie okazało się, że istnieje grupa Google i odpowiedź na moje pytanie jest jedno z pytań zadawanych tam. https://groups.google.com/forum/?fromgroups=#!searchin/masstransit-discuss/publishing$20message$20without20subscriber/masstransit-discuss/RU2_443iak8/OfILeKbfGNQJ – TheMar

+0

Zaznaczę to pytanie jako zamknięte dzisiaj, aby powyższy link do grupy google jest nadal widoczny – TheMar

Odpowiedz

7

następujących odpowiedzi na masstransit-paletek naprawdę mi pomógł.

Od Grupie Google masstransit-dyskutować

... Rzecz z MassTransit jest to, że w rzeczywistości nie publikują do kolejki, publikowania do wymiany, która jest następnie skonfigurować, aby przekazać tę wiadomość do innych kolejek, które subskrybują wiadomości na tej giełdzie. Ponieważ nie masz żadnych konsumentów, nikt nie wyraził zainteresowania Twoją wiadomością, więc zostanie po prostu zignorowana.

Po prostu skonfiguruj konsumenta i posłuchaj go "rabbitmq: // localhost/B". Pierwszy raz go uruchomić, stworzy niezbędne do wymiany i powiązań między nimi, a wiadomość zostanie przekazana do kolejki o nazwie B.

Anders

Magistrala jest zbiorem wszystkich giełdach, kolejki i usługi razem. Kiedy publikujesz w autobusie, wszyscy konsumenci zarejestrowani w tym autobusie otrzymają go.

Wymiany są implementacją RabbitMQ wykonania tej pracy.

Travis

+0

Link do tej konkretnej dyskusji w Grupach dyskusyjnych Google (co jest bardzo pomocne!): https://groups.google.com/forum/#!topic/masstransit-discuss/6cegDxuSZpw –

Powiązane problemy