我正在使用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条消息,则消息不会丢失,一旦订阅者恢复生命,消息就会被处理。
所以我的问题是:
答案 0 :(得分:4)
默认情况下,队列中的任何消息都将保留在那里,直到发生以下三种情况之一:
如果你有一个充满消息的队列,这些消息通常会一直存在,直到发生这三件事之一。希望您能尽快让您的消费者在线,以便您可以使用消息并处理它们。
如果您希望在一段时间后自动删除邮件(假设它们没有先被消费),您只需设置一个生存时间(ttl)
崩溃...如果您将消息持久保存到磁盘,则消息可以在崩溃/重新启动后继续存在。但是,如果服务器在消息从交换机路由到队列之前崩溃,那么消息仍有可能丢失。
答案 1 :(得分:1)
最重要的是。
很好地阅读常见问题的常见问题