Ứng dụng của tôi bao gồm ứng dụng ASP.NET MVC 3 và Dịch vụ Windows, cả trên cùng một hộp. Ứng dụng MVC sử dụng MassTransit để đặt các tin nhắn trên một hàng đợi MSMQ. Dịch vụ này sử dụng MassTransit để đọc các tin nhắn này từ MSMQ và thực hiện một số công việc. Khi tôi tải lên dịch vụ và ứng dụng và để chúng chạy đồng thời, mọi thứ dường như hoạt động tốt. Tuy nhiên, nếu tôi chỉ tải ứng dụng web, tin nhắn của tôi không được thêm vào MSMQ và về cơ bản biến mất. Điều kỳ lạ là nếu tôi tải lên ứng dụng web của tôi và sau đó bắt đầu và ngay lập tức ngừng dịch vụ cho biết, các tin nhắn tiếp theo được gửi từ ứng dụng web sẽ được thêm vào hàng đợi.Masstransit - Không có tin nhắn nào được thêm vào MSMQ khi dịch vụ nhận không được khởi động
Không có nhiều ví dụ tốt/hiện đại về việc sử dụng MassTransit với StructureMap và/hoặc MVC, vì vậy nó có thể là một vấn đề với cấu hình của tôi, nhưng sau một vài giờ dùng thử và lỗi tôi không chắc chắn làm thế nào để tiến hành . Tôi cũng có thể được lợi dụng MassTransit - thực sự những gì tôi cần là một đám cháy và quên giải pháp từ các ứng dụng web ...
dịch vụ của tôi trông như thế này:
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);
}
}
ứng dụng web của tôi trông như thế này:
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>()); });
}));
}
}
Mọi trợ giúp sẽ được đánh giá cao!