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
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
Io segnerò questa domanda chiuso oggi in modo che il link qui sopra per gruppo Google è ancora visibile – TheMar