我正在使用MassTransit和RabbitMQ創建一個簡單的發佈者/訂閱者。 出版商具有下面的代碼初始化總線:RabbitMQ消息沒有訂閱者需要多久?
/** 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的隊列,直到一個用戶出現且把它撿起來?
- 如果服務器重新啓動並且某些消息沒有被任何訂閱服務器處理,它們會丟失,或者一旦訂閱服務器在重新啓動後生效就會被處理,會發生什麼情況?
- 這是確保每一條消息都得到處理或者我應該使用不同策略的正確模式嗎?
正是我在找@derick – Raffaeu