Mi aplicación consiste en una aplicación ASP.NET MVC 3 y un servicio de Windows, ambos en el mismo cuadro. La aplicación MVC usa MassTransit para colocar mensajes en una cola de MSMQ. El servicio usa MassTransit para leer estos mensajes de MSMQ y realizar algún trabajo. Cuando cargo el servicio y la aplicación y los ejecuto simultáneamente, todo parece funcionar bien. Sin embargo, si solo cargo la aplicación web, mis mensajes no se agregan a MSMQ y desaparecen. Lo curioso es que si cargo mi aplicación web y luego comienzo e inmediatamente detengo dicho servicio, los mensajes posteriores enviados desde la aplicación web se agregan a la cola.Masstransit: no se agregaron mensajes a MSMQ cuando el servicio del receptor no se inició
No había muchos buenos/modernos ejemplos de uso de MassTransit con StructureMap y/o MVC, por lo que podría ser un problema con mi configuración, pero después de un par de horas de prueba y error no estoy seguro de cómo proceder . Estoy también esté haciendo mal uso de MassTransit - en realidad lo que necesito es un fuego y olvido solución a partir de la aplicación web ...
Mi servicio es el siguiente:
class Program
{
static void Main(string[] args)
{
Bus.Initialize(sbc =>
{
sbc.UseMsmq();
sbc.VerifyMsmqConfiguration();
sbc.UseMulticastSubscriptionClient();
sbc.ReceiveFrom("msmq://localhost/receiver");
});
ObjectFactory.Initialize(x =>
{
x.AddRegistry(new EmailSenderRegistry());
});
var host = HostFactory.New(c =>
{
c.SetServiceName("MyApp.EmailMessageReader");
c.SetDisplayName("MyApp.EmailMessageReader");
c.SetDescription("MyApp.EmailMessageReader");
c.Service<ClientService>(a =>
{
a.ConstructUsing(service => new ClientService());
a.WhenStarted(o => o.Start());
a.WhenStopped(x=>x.Stop());
});
});
host.Run();
}
}
internal class ClientService
{
public void Start()
{
Bus.Instance.SubscribeConsumer<EmailPrepService>();
}
public void Stop()
{
// do nothing
}
}
public class EmailPrepService : Consumes<EmailMessage>.All
{
public void Consume(EmailMessage message)
{
PrepareEmailForSending(message);
var emailService = ObjectFactory.GetInstance<IEmailSender>();
emailService.SendEmail(message);
}
}
Mi aplicación web es el siguiente:
public class BusRegistry : Registry
{
public BusRegistry()
{
For<IServiceBus>().Singleton().Use(context => ServiceBusFactory.New(sbc =>
{
sbc.ReceiveFrom("msmq://localhost/sender");
sbc.UseMsmq();
sbc.UseMulticastSubscriptionClient();
sbc.UseControlBus();
sbc.Subscribe(subs => { subs.LoadFrom(context.GetInstance<IContainer>()); });
}));
}
}
¡Cualquier ayuda sería apreciada!