2013-03-18 8 views
9

Sto cercando di ottenere la mia testa intorno MassTransit e RabbitMQ e la coda (giorno 1)Newbie - è una coda di consumo necessario per l'editoria di lavorare in MassTransit

La domanda che ho è se è necessario un "consumatore per far funzionare la coda in MT. Il motivo per cui lo chiedo è perché ho creato Dominio e Producer per la prima volta, ma non ho visto alcun elemento in coda nella finestra di gestione di RabbitMQ. "

Quando viene creata la coda Consumatore, è possibile visualizzare il messaggio in coda.

Sulla base delle mie conoscenze, il produttore non è mai a conoscenza del consumatore, quindi perché MassTransit ha richiesto la coda dei consumatori per avviare la pubblicazione dei messaggi?

Il Producer

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

L'applicazione

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

Il Messaggio

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

Th e Consumer Service codice di

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

è stata creata usando esempi sul web.

Modifica vorrebbe anche aggiungere che tutti gli spazi dei nomi sono diversi progetti dominio Produttore consumatori

saluti,

Mar

+0

ho appena scoperto che c'è un gruppo Google e la risposta alla mia domanda è in una delle domande poste lì. https://groups.google.com/forum/?fromgroups=#!searchin/masstransit-discuss/publishing$20message$20without$20subscriber/masstransit-discuss/RU2_443iak8/OfILeKbfGNQJ – TheMar

+0

Io segnerò questa domanda chiuso oggi in modo che il link qui sopra per gruppo Google è ancora visibile – TheMar

risposta

7

le seguenti risposte su masstransit-disco mi ha veramente aiutato.

Dal gruppo Google masstransit-discutere

... La cosa con MassTransit è che in realtà non pubblica a una coda, si pubblica ad uno scambio che viene poi impostato per trasmettere questo messaggio ad altre code che hanno sottoscritto messaggi su tale scambio. Dal momento che non hai alcun consumatore, nessuno ha espresso alcun interesse nel tuo messaggio, quindi verrà semplicemente ignorato.

Quindi, basta impostare un utente e ascoltare "rabbitmq: // localhost/B". La prima volta che lo si esegue, si creerà gli scambi ei collegamenti necessari tra di loro, e il tuo messaggio sarà passato a una coda di nome B.

Anders

Un autobus è la raccolta di tutti gli scambi, code e servizi tutti insieme. Quando pubblichi su un autobus, tutti i consumatori registrati su quel bus lo riceveranno.

Gli scambi sono l'implementazione di RabbitMQ per rendere questo lavoro.

Travis

+0

il link di questa discussione particolare gruppo Google (che è molto utile!): https://groups.google.com/forum/#!topic/masstransit-discuss/6cegDxuSZpw –

Problemi correlati