روش‌های دو تا هست برای تنظیم زمان انقضای پیام (TTL) برای RabbitMQ:

  1. از طریق ویژگی‌های صف، جایی که همه پیام‌ها در صف زمان انقضای یکسانی دارن.
  2. تنظیم زمان انقضای هر پیام به صورت جداگانه که امکان داره TTL متفاوتی برای هر پیام تعیین شه. اگر هر دو روش را باهم استفاده کردید، زمان انقضای پیام، کوچکترین مقدار بین دو مورد خواهد بود.

نکته: برای اولین روش تنظیم ویژگی‌های صف، هنگامی که پیام منقضی می‌شود، از صف حذف می‌شود. در روش دوم، حتی اگر پیام منقضی شود، فوراً از صف حذف نمی‌شود چون انقضای هر پیام پیش از تحویل به مصرف‌کنندگان بررسی می‌شود.

در زیر نمایشی از چگونگی انجام این کار در Golang مشابه سایر زبان‌های برنامه‌نویسی آمده.

تنظیم زمان انقضای صف

تنظیم زمان انقضای پیام از طریق ویژگی‌های صف (x-message-ttl).

	// ویژگی‌های صف
	props := make(map[string]interface{})
	// زمان انقضای پیام 60 ثانیه است
	props["x-message-ttl"] = 60000

	q, err := ch.QueueDeclare(
		"tizi365.ttl.hello", // نام صف
		true,   // آیا باید صف ماندگار باشد
		false,
		false,
		false,
		props, // تنظیم ویژگی‌های صف
	)

تنظیم زمان انقضای پیام

تنظیم زمان انقضای پیام از طریق ویژگی‌های پیام

err = ch.Publish(
		"tizi365",     // نام تعویض
		"", // کلید مسیریابی
		false,
		false,
		amqp.Publishing{
			Expiration: "30000", // زمان انقضا 30 ثانیه است
			ContentType: "text/plain",
			Body:        []byte(body),
		})