Code Monkey home page Code Monkey logo

python-rabbitmq-example's Introduction

Pythonda RabbitMQ bilan ishlash

RabbitMQ nima?

RabbitMQ - xabarlar menjeri bo'lib, u Erlang dasturlash tilida yozilgan. U bir nechta xizmat(servis)lar o'rtasida ma'lumotlarni yuborish va qabul qilish uchun mo'ljallangan: bitta xizmat navbatga xabar joylaydi, boshqa xizmat esa o'sha xabarni qabul qiladi.

RabbitMQni o'rnatish va ishga tushirish

Terminalda o'rnatish:

brew install rabbitmq

RabbitMQni ishga tushirish:

brew services start rabbitmq

RabbitMQ http://localhost:15672/ manzilida ishga tushadi. Istalgan brauzer orqali shu manzilga kirilganda sizdan username va password so'raladi.

Login Page

Standart holatda

username: guest
password: guest

bo'ladi.

RabbitMQ bilan ishlashni boshlash

RabbitMQ plaginlari bilan ishlash uchun rabbitmq-plugins buyrug'idan foydalanamiz. Plaginlar ro'yxatini ko'rish uchun quyidagi komandani yozamiz:

rabbitmq-plugins list

Terminalda turli xil plaginlar ro'yxatini ko'rinishimiz mumkin va biz ulardan RabbitMQni ishlatishda foydalanamiz.

Agar rabbitmq-plugins buyrug'i topilmadi degan xato chiqsa, ~/.bash_profile ichida RabbitMQning manzilini ko'rsatib qo'yish kerak:

export PATH=$PATH:/usr/local/opt/rabbitmq/sbin

RabbitMQning 4 ta muhim tushunchasi bor:

  • producer - mijoz, u xabarlarni yuboradi
  • queue - xabarlar navbati
  • consumer - mijoz, u navbatdan xabarlarni oladi
  • exchange - u producerdan xabarlarni oladi, xabar turiga qarab uni kerakli navbatga yuboradi

Python orqali RabbitMQ bilan ishlash

Pythonda yangi proyekt yaratib olamiz.

RabbitMQ bilan ishlash uchun AMQP (Advanced Message Queuing Protocol) kerak bo'ladi. Pythonda u bilan pika kutubxonasi yordamida ishlash mumkin.

pika kutubxonasini o'rnatish

pip install pika

Ana endi proyekt ichida producer.py faylini yaratib olamiz va uning ichiga quyidagi kodni yozamiz:

import pika

# Localhostda ishlayotgan RabbitMQ serveriga ulanadi
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))

# RabbitMQ bilan aloqa o'rnatiladigan kanal yaratadi
channel = connection.channel()

# 'salom' deb nomlangan navbat mavjudligini tekshiradi, agar mavjud bo'lmasa yaratadi
channel.queue_declare(queue='salom')

# 'salom' navbatiga 'Salom dunyo!' xabarini qo'shadi
channel.basic_publish(exchange='',
                      routing_key='salom',
                      body=b'Salom dunyo!')

# RabbitMQ bilan aloqa uziladi
connection.close()

Kodni ishga tushiramiz:

python producer.py

Endi xabar navbatga qo'shilganini tekshirib ko'rinishimiz kerak.

Buning uchun rabbitmqadmin buyrug'idan foydalanamiz. rabbitmqadmin buyrug'idan foydalanish uchun rabbitmq_management plagini yoqilgan bo'lishi kerak.

Yoqilgan plaginlar ro'yxatini quyidagi komanda orqali ko'rish mumkin:

rabbitmq-plugins list -E

Agar ro'yxatda rabbitmq_management plagini bo'lmasa, uni yoqish uchun quyidagi komandadan foydalanamiz:

rabbitmq-plugins enable rabbitmq_management

Ana endi xabar salom navbatiga qo'shilganini tekshirib ko'rishimiz mumkin:

rabbitmqadmin get queue='salom'

Natija

+-------------+----------+---------------+--------------+---------------+------------------+------------+-------------+
| routing_key | exchange | message_count |   payload    | payload_bytes | payload_encoding | properties | redelivered |
+-------------+----------+---------------+--------------+---------------+------------------+------------+-------------+
| salom       |          | 0             | Salom dunyo! | 12            | string           |            | False       |
+-------------+----------+---------------+--------------+---------------+------------------+------------+-------------+

Barcha navbatlar ro'yxatini ko'rish uchun esa:

rabbitmqctl list_queues

Natija

Timeout: 60.0 seconds ...
Listing queues for vhost / ...
name    messages
salom   1

Ko'rinib turibdiki, salom navbatida 1 dona xabar mavjud.

Navbatdan xabarni o'qib olish uchun proyektimizda consumer.py faylini yaratamiz va uning ichiga ushbu kodni yozamiz:

import pika

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))

channel = connection.channel()

channel.queue_declare(queue='salom')


# Xabar kelganda ishga tushadigan funksiya e'lon qilingan
def callback(ch, method, properties, body):
    print("[x] Qabul qilindi %r" % body)


# 'salom' navbatini tinglaydi va kelgan xabarlarni callback funksiyasiga yuboradi
channel.basic_consume(queue='salom', on_message_callback=callback, auto_ack=True)

print('[*] Xabarlar kutilmoqda. Chiqish uchun CTRL+C tugmalarini bosing')

# Xabarlarni tinglash ishga tushadi
channel.start_consuming()

Faylni ishga tushiramiz:

python consumer.py

Natija:

[*] Xabarlar kutilmoqda. Chiqish uchun CTRL+C tugmalarini bosing
[x] Qabul qilindi b'Salom dunyo!'

Chiqish uchun CTRL+C tugmalarini bosamiz.

Navbatlar ro'yxatini qaytadan tekshiramiz.

rabbitmqctl list_queues

Natija

Timeout: 60.0 seconds ...
Listing queues for vhost / ...
name    messages
salom   0

Ana endi salom navbatida xabarlar mavjud emasligini ko'rishimiz mumkin.

python-rabbitmq-example's People

Contributors

asliddin750750 avatar

Watchers

Asliddin Maxmudov avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.