Rabbitmq กับการกำหนดขนาด queue


#1

ถ้าใช้ celery ก็คงจะได้เจอบ้างไม่มากก็น้อยว่า celeryev** ซึ่งคือที่เก็บ event ต่างซึ่งเป็นผลของแต่ละ task ก็จะเยอะแยะมากมาย จนบางทีก็รบกวนการทำงานของ worker ซะงั้น เอาเป็นว่า มันก็มี 2 ทางคือ ตั้ง TTL ของ event ไป ไม่ก็จำกัดขนาด queue ทาง rabbitmq แทน ด้วยคำสั่งง่ายๆ ก็เรียบร้อย

rabbitmqctl set_policy limit_celeryev_queues "^celery\." '{"max-length":500000}' --apply-to queues

นี่คือ การ limit ไว้แค่ 500,000 อันก็พอ (มากกว่านี้ก็ไม่รุ้จะเก็บไว้ทำไม เพราะเราก็คงไม่ไปดู task เก่าๆ มากมายอยู่ดี) และเค้าว่ากันว่า เกินกว่า 4-5 วิ ก็เป็นข้อมูลอดีต ไม่น่าสนใจซะละ


#2

การ list queue

rabbitmqctl list_queues

ปัญหาคือ ถ้า list_queues เฉยๆ มันจะแค่ list ของ root มา ถ้าอยากจะ list ของ vhost อื่นๆ อะไรก็ต้องแยกกันไป

rabbitmqctl list_queues -p my_vhost

การลบ queue

การลบจริงๆ แล้วจะต้องลบผ่าน rabbitmq_management แต่จะให้ลบทาง web ก็ยากไป มันเลยมี rabbitmqadmin เป็นเหมือน CLI interface ให้ เป็น python script ก่อนใช้ก็อ่านมันนิดนึง ในส่วน conf ที่ต้องตั้งค่านิดนึง แล้วอย่าลืม chmod +x ไปด้วย

เวลาลบ มันก็ต้องลบทีละ queue ก็เลยทำง่ายๆ คือ เอามาจาก list นั่นแหละ pipe ๆ เอา เช่น

rabbitmqctl list_queues | awk '{print $1}' | xargs -I qn rabbitmqadmin delete queue name=qn -c rabbitmqadmin.conf -N host_normal