【发布时间】:2016-01-12 15:21:55
【问题描述】:
我正在使用 MassTransit 和 RabbitMQ 创建一个简单的发布者/订阅者。 Publisher 有以下代码来初始化总线:
/** create the bus */
var bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
var host = cfg.Host(new Uri("rabbitmq://localhost/"), h =>
{
h.Username("guest");
h.Password("guest");
});
});
/** start the bus and publish */
bus.Start();
bus.Publish<IPersonLogin>(new {FirstName = "John", LastName = "Smith"});
并且订阅者有这个代码用于初始化:
var bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
var host = cfg.Host(new Uri("rabbitmq://localhost/"), h =>
{
h.Username("guest");
h.Password("guest");
});
cfg.ReceiveEndpoint(host, "person_login", e =>
{
e.Consumer<PersonLoginConsumer>();
});
});
如果我关闭订阅者并发布 2 条消息,则消息不会丢失,并且一旦订阅者恢复运行,消息就会被处理。
所以我的问题是:
- 如何确保消息一直保留在 RabbitMQ 的队列中,直到有一个订阅者出现并取走它?
- 如果服务器重新启动并且某些消息没有被任何订阅服务器处理会发生什么情况,它们会丢失还是在重新启动后订阅服务器恢复活动时立即被处理?
- 这是确保处理每条消息的正确模式还是应该使用不同的策略?
【问题讨论】:
标签: c# rabbitmq masstransit