Ich versuche, meinen Kopf um Masstransit und RabbitMQ und Queuing (Tag 1)Newbie - Ist eine Consumer Queue notwendig, um für die Veröffentlichung in Masstransit zu arbeiten
Die Frage, die ich zu bekommen habe, ob ein „Consumer notwendig damit ich in der Warteschlange in MT arbeiten kann. Der Grund, warum ich frage, ist, dass ich zuerst Domain und Producer erstellt habe, aber im Warteschlangen-Management-Fenster habe ich keine Warteschlangen gefunden. "
Wenn die Consumer Queue erstellt wird, kann ich die Nachricht in der Warteschlange sehen.
Basierend auf meinem Verständnis, Produzent ist nie bewusst, Verbraucher, also warum MassTransit Verbraucher-Warteschlange erforderlich, um die Veröffentlichung von Nachrichten zu starten?
Der Produzent
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" });
}
}
}
Die Anwendung
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;
}
}
}
}
Die Nachricht
namespace Domain
{
public class NewOrderMessage
{
public NewOrderMessage()
{
OrderId = Guid.NewGuid();
}
public Guid OrderId { get; set; }
public string OrderName { get; set; }
}
}
Th e Consumer Service
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);
}
}
}
Code wurde anhand von Beispielen auf Web erstellt.
bearbeiten möchte hinzufügen, auch, dass alle Namensräume verschiedene Projekte Domain Producer Consumer
Grüße,
Mar
Ich fand nur, dass es eine Google-Gruppe ist und die Antwort auf meine Frage ist, in einem der dort gestellten Fragen. https://groups.google.com/forum/?fromgroups=#!searchin/masstransit-discuss/publishing$20message$20without$20subscriber/masstransit-discuss/RU2_443iak8/OfILeKbfGNQJ – TheMar
Ich werde diese Frage heute als geschlossen markieren, so dass die Link oben zu Google Group ist immer noch sichtbar – TheMar