Muallif
July 19, 2024
216RabbitMQ - xabarlar menjeri bo'lib, u Erlang dasturlash tilida yozilgan. U bir nechta xizmat(servis)lar o'rtasida ma'lumotlarni yuborish(xabarlar) uchun mo'ljallangan: bitta xizmat navbatga xabar joylaydi, boshqa xizmat esa o'sha xabarni qabul qiladi.
RabbitMQ - xabarlar menjeri bo'lib, u Erlang dasturlash tilida yozilgan. U bir nechta xizmat(servis)lar o'rtasida ma'lumotlarni yuborish(xabarlar) uchun mo'ljallangan: bitta xizmat navbatga xabar joylaydi, boshqa xizmat esa o'sha xabarni qabul qiladi.
Quyida RabbitMQ'ni o'rnatish, uni ishga tushirish va Python dasturlash tili yordamida RabbitMQ bilan ishlash ko'rsatilgan.
Arch Linux'ga o'rnatish uchun terminaldan quyidagi buyruq beriladi:
bash
Копировать код
sudo pacman -S rabbitmq
Debian/Ubuntuga o'rnatish uchun terminaldan quyidagi buyruq beriladi:
bash
Копировать код
apt install rabbitmq-server
Yoki bo'lmasa, Docker orqali ishga tushirish quyidagicha:
bash
Копировать код
docker run docker pull rabbitmq
RabbitMQ rabbit-plugins
yordamida plagin(plugins)lar bilan ishlash imkoni beradi.
Faol plaginlarni ko'rish uchun quyidagi buyruq beriladi:
bash
Копировать код
admin@ip-172-31-33-210:~$ sudo rabbitmq-plugins list
rabbitmq_management plaginini faollashtiramiz:
bash
Копировать код
admin@ip-172-31-33-210:~$ sudo rabbitmq-plugins enable rabbitmq_management
Faol plaginlar /etc/rabbitmq/enabled_plugins
faylida saqlanadi:
bash
Копировать код
root@ip-172-31-33-210:/home/admin# cat /etc/rabbitmq/enabled_plugins [rabbitmq_management].
HTTP API
rabbitmq_management
plagini RabbitMQ'dan API orqali 15672 portda foydalanish imkonini beradi:
bash
Копировать код
root@ip-172-31-33-210:/home/admin# netstat -anp | grep 15672
So'rovga misol:
bash
Копировать код
root@ip-172-31-33-210:/home/admin# curl -i -u guest:guest localhost:15672/api/overview
rabbitmqadmin python'dan yaratilgan dasturiy uskuna bo'lib, HTTP API yordamida turli xil operatsiyalar bajarish imkonini beradi, masalan, navbatlarni ko'rish, almashish nuqtalarni kuzatish, foydalanuvchilarni tekshirish va boshqalar. U rabbitmq_management plaginini talab qiladi.
rabbitmqctl
Bu plagin asosan klasterdagi nodlarni boshqarish uchun qo'llaniladi - yangi qo'shish, o'chirish, qayta ishga tushirish va loglarni boshqarish uchun.
Shunga o'xshash rabbitmqadmin plagini foydalanuvchilarni, navbatlarni, almashinuv nuqtalarini boshqarish uchun ishlatilinadi.
bash
Копировать код
root@ip-172-31-33-210:/home/admin# rabbitmqctl status
Foydalanuvchilarni ko'rish:
bash
Копировать код
root@ip-172-31-33-210:/home/admin# rabbitmqctl list_users
Web-UI
Plagin faollashtirilganidan so'ng, veb interfeys orqali unga ulanish mumkin: localhost:15672
guest
foydalanuvchi taqiqlangan. Shu sababli yangi foydalanuvchi qo'shib olamiz:
bash
Копировать код
root@ip-172-31-33-210:/home/admin# rabbitmqctl add_user test test
Uni administrator qilib belgilaymiz:
bash
Копировать код
root@ip-172-31-33-210:/home/admin# rabbitmqctl set_user_tags test administrator
Va unga barcha huquqlarni beramiz:
bash
Копировать код
root@ip-172-31-33-210:/home/admin# rabbitmqctl set_permissions -p / test ".*" ".*" ".*"
RabbitMQ ni ichiga kiramiz:
RabbitMQ'ning 4 ta muhim tushunchasi bor:
Misol. RabbitMQ bilan ishlash uchun AMQP (Advanced Message Queuing Protocol) kerak bo'ladi. Python'da u bilan pika, py-amqplib va boshqa kutubxonalar yordamida ishlash mumkin.
pika kutubxonasini o'rnatamiz:
bash
Копировать код
apt install python-pika
producer uchun skript yozamiz, u navbatga xabar yuboradi:
python
Копировать код
#!/usr/bin/env python import pika connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() channel.queue_declare(queue='hello') channel.basic_publish(exchange='', routing_key='hello', body='Hello World!') print(" [x] Sent 'Hello World!'") connection.close()
Bu yerda quyidagilar bajariladi:
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
queue_declare(queue='hello')
routing_key='hello'
) xabar yuboriladi.connection.close()
Skriptni ishga tushiramiz:
bash
Копировать код
admin@ip-172-31-33-210:~$ ./producer.py
rabbitmqadmin orqali tekshiramiz:
bash
Копировать код
root@ip-172-31-33-210:/home/admin# rabbitmqadmin get queue='hello'
rabbitmqctl buyruqi orqali navbatlar ro'yxatini tekshiramiz:
bash
Копировать код
root@ip-172-31-33-210:/home/admin# rabbitmqctl list_queues
hello navbatida 1 dona xabar mavjud. Uni qabul qilamiz.
Ikkinchi skript consumer.py - navbatdan xabarni qabul qiladi va uni ekranga chiqaradi:
python
Копировать код
#!/usr/bin/env python import pika connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() channel.queue_declare(queue='hello') def callback(ch, method, properties, body): print(" [x] Received %r" % body) channel.basic_consume(callback, queue='hello', no_ack=True) print(' [*] Waiting for messages. To exit press CTRL+C') channel.start_consuming()
Bu yerda quyidagilar bajariladi:
callback()
funksiyasini yaratamiz, u xabarni qabul qiladi va uni ekranga chiqaradi;basic_consume()
ni chaqiramiz, unga navbat nomi yuboramiz;start_consuming()
.Ishga tushiramiz:
bash
Копировать код
root@ip-172-31-33-210:/home/admin# ./consumer.py
Navbatni tekshiramiz, endi u bo'sh!
bash
Копировать код
root@ip-172-31-33-210:/home/admin# rabbitmqctl list_queues