آلية استدامة RabbitMQ تشمل استدامة الطابور (Queue persistence)، استدامة الرسالة (Message persistence)، واستدامة التبادل (Exchange persistence). سواء كانت الرسالة مستدامة أم لا، يمكن كتابتها على القرص.
يتم كتابة الرسائل المستدامة إلى كل من الذاكرة والقرص (لتسريع القراءة)، بينما يتم كتابة الرسائل غير المستدامة إلى القرص عندما يكون هناك نقص في الذاكرة (وسيتم فقدانها بعد إعادة تشغيل RabbitMQ).
استدامة طابور RabbitMQ
عند تعريف طابور، يمكنك تعيين ما إذا كان يجب استدامة الطابور. في لغة البرمجة Golang، يتم تعريف الطابور كما يلي:
q, err := ch.QueueDeclare(
"hello", // اسم الطابور
true, // ما إذا كان ينبغي أن يكون الطابور مستدامًا
false,
false,
false,
nil,
)
نصيحة: بشكل مماثل للغات البرمجة الأخرى، يمكن تعيين الطابور عند تعريفه.
استدامة تبادل RabbitMQ
عند تعريف تبادل، يمكنك تعيين ما إذا كان يجب أن يكون مستدامًا باستخدام الخصائص. في لغة البرمجة Golang، يتم تعريفه كما يلي:
err = ch.ExchangeDeclare(
"tizi365", // اسم التبادل
"fanout", // نوع التبادل
true, // ما إذا كان يجب أن يكون مستدامًا
false,
false,
false,
nil,
)
نصيحة: بشكل مماثل للغات البرمجة الأخرى، يمكن تعيين الاستدامة عند تعريف التبادل.
استدامة رسالة RabbitMQ
عند نشر رسالة، يمكنك تعيين ما إذا كان ينبغي أن تكون الرسالة مستدامة من خلال خصائص الرسالة.
نصيحة: استدامة الطابور لا تعني أن الرسالة مستدامة تلقائيًا.
في Golang، يتم نشر الرسائل كما يلي:
err = ch.Publish(
"tizi365", // التبادل
"", // مفتاح التوجيه
false,
false,
amqp.Publishing{
DeliveryMode:2, // وضع توصيل الرسالة، 1 للرسائل غير المستدامة، 2 للرسائل المستدامة
ContentType: "text/plain",
Body: []byte(body),
})