我的應用程序由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>()); });
}));
}
}
任何幫助,將不勝感激!