我的应用程序由ASP.NET MVC 3应用程序和Windows Service组成,它们都位于同一个框中。 MVC应用程序使用MassTransit将消息放置在MSMQ队列中。该服务使用MassTransit从MSMQ读取这些消息并执行一些工作。当我加载服务和应用程序并让它们同时运行时,一切似乎都正常。但是,如果我只加载Web应用程序,我的消息不会被添加到MSMQ并基本上消失。奇怪的是,如果我加载我的Web应用程序,然后启动并立即停止所述服务,则从Web应用程序发送的后续消息将被添加到队列中。Masstransit - 未启动接收器服务时未向MSMQ添加消息
没有很多好的/现代的使用MassTransit和StructureMap和/或MVC的例子,所以它可能是我的配置问题,但经过几个小时的反复试验后,我不知道如何继续。我也可能会滥用MassTransit - 真的是我需要的是一个火,忘记从Web应用解决方案......
我的服务是这样的:
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);
}
}
我的web应用程序是这样的:
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>()); });
}));
}
}
任何帮助,将不胜感激!