This shows you the differences between two versions of the page.
|
isi:laboratoare:07 [2025/11/15 20:08] alexandru.predescu |
isi:laboratoare:07 [2025/11/21 12:52] (current) stefanel.turcu |
||
|---|---|---|---|
| Line 167: | Line 167: | ||
| Pași pentru conectarea la RabbitMQ folosind Python | Pași pentru conectarea la RabbitMQ folosind Python | ||
| - | **1. Instalarea Bibliotecii pika** | + | **1. Instalarea bibliotecii pika** |
| Asigură-te că ai instalat biblioteca ''pika''. Poți face acest lucru rulând următoarea comandă: | Asigură-te că ai instalat biblioteca ''pika''. Poți face acest lucru rulând următoarea comandă: | ||
| Line 308: | Line 308: | ||
| print(f"Exchange-ul '{exchange_name}' de tip 'fanout' a fost creat.") | print(f"Exchange-ul '{exchange_name}' de tip 'fanout' a fost creat.") | ||
| - | hannel.queue_declare(queue=queue_name) | ||
| - | |||
| - | # Legare queue la exchange | ||
| queue_name = "queue1" # nume diferite pentru fiecare consumator | queue_name = "queue1" # nume diferite pentru fiecare consumator | ||
| + | channel.queue_declare(queue=queue_name) | ||
| + | # Legare queue la exchange | ||
| channel.queue_bind(exchange=exchange_name, queue=queue_name) | channel.queue_bind(exchange=exchange_name, queue=queue_name) | ||
| Line 349: | Line 348: | ||
| === Setup MQTT === | === Setup MQTT === | ||
| - | Instalare în Python (biblioteca ''paho-mqtt''): | + | Pentru a conecta o aplicație Python la MQTT, vei folosi biblioteca ''paho-mqtt''. Aceasta permite crearea și configurarea conexiunilor, și trimiterea sau recepționarea mesajelor prin MQTT. |
| + | |||
| + | == 1. Instalarea bibliotecii ''paho-mqtt'' == | ||
| + | |||
| + | Asigură-te că ai instalat biblioteca ''paho-mqtt''. Poți face acest lucru rulând următoarea comandă: | ||
| <code> | <code> | ||
| Line 356: | Line 359: | ||
| == Publisher == | == Publisher == | ||
| + | |||
| + | Următoarea secvență de cod implementează un nod de tip publisher care trimite mesaje prin MQTT: | ||
| <code python> | <code python> | ||
| Line 381: | Line 386: | ||
| == Subscriber == | == Subscriber == | ||
| + | |||
| + | Următoarea secvență de cod implementează un nod de tip subscriber care primește mesaje venite prin MQTT: | ||
| <code python> | <code python> | ||
| Line 404: | Line 411: | ||
| client.loop_forever() | client.loop_forever() | ||
| </code> | </code> | ||
| + | |||
| + | == Interfață grafică == | ||
| + | |||
| + | Putem vizualiza datele la nivelul broker-ului de mesaje folosind un GUI precum MQTTBox (windows: [[https://apps.microsoft.com/detail/9nblggh55jzg|from Microsoft Store]], web: [[https://github.com/workswithweb/MQTTBox|from GitHub]]) | ||
| + | |||
| + | {{:isi:laboratoare:mqtt_box_1.png?600|}} | ||
| + | |||
| + | {{:isi:laboratoare:mqtt_box_2.png?600|}} | ||
| + | |||
| + | |||
| + | |||
| Line 411: | Line 429: | ||
| === RabbitMQ === | === RabbitMQ === | ||
| - | <note> | + | <note tip> |
| - | Descărcați proiectul de pe GitHub: [[https://github.com/ACS-ISI/Messenger/tree/main|Messenger]] | + | Pentru a instala toate dependențele necesare pentru laboratorul de astăzi, rulați: ''pip install -r requirements.txt'' folosind fișierul requirements.txt cu următorul conținut: |
| - | </note> | + | |
| + | <code> | ||
| + | Flask==3.1.0 | ||
| + | Flask_SocketIO==5.4.1 | ||
| + | pika==1.3.2 | ||
| + | </code> | ||
| - | <note tip> | ||
| - | Pentru a instala toate dependențele necesare pentru laboratorul de astăzi, rulați: ''pip install -r requirements.txt''. Fișierul ''requirements.txt'' poate fi descărcat de aici: [[https://github.com/ACS-ISI/Messenger/blob/main/requirements.txt|requirements.txt]]. | ||
| </note> | </note> | ||
| Line 425: | Line 445: | ||
| - | == 2. Exchange și publisher de mesaje == | + | == 2. Publisher de mesaje == |
| Creează un script Python care să permită citirea textelor de la tastatură și publicarea acestora într-un exchange nou. (care este creat programatic după realizarea cu succes a conexiunii la RabbitMQ). Scriptul va citi textul de la utilizator și va publica fiecare mesaj în exchange-ul RabbitMQ (in mod ''fanout''). | Creează un script Python care să permită citirea textelor de la tastatură și publicarea acestora într-un exchange nou. (care este creat programatic după realizarea cu succes a conexiunii la RabbitMQ). Scriptul va citi textul de la utilizator și va publica fiecare mesaj în exchange-ul RabbitMQ (in mod ''fanout''). | ||
| Line 438: | Line 458: | ||
| </code> | </code> | ||
| - | == 3. Queue și subscriber pentru mesaje == | + | == 3. Subscriber pentru mesaje == |
| Creează un script Python care să creeze un queue, să-l lege la exchange-ul din exercițiul 1 și să afișeze fiecare mesaj primit. Scriptul va crea un queue nou și îl va asocia (binding) cu exchange-ul creat în exercițiul anterior. Pentru fiecare mesaj primit în queue, scriptul va afișa conținutul acestuia în consolă. | Creează un script Python care să creeze un queue, să-l lege la exchange-ul din exercițiul 1 și să afișeze fiecare mesaj primit. Scriptul va crea un queue nou și îl va asocia (binding) cu exchange-ul creat în exercițiul anterior. Pentru fiecare mesaj primit în queue, scriptul va afișa conținutul acestuia în consolă. | ||
| Line 464: | Line 484: | ||
| TOPIC = "chat/general" | TOPIC = "chat/general" | ||
| </code> | </code> | ||
| + | |||
| + | Atenție! Daca toți colegii se conecteaza pe același topic, mesajele vor ajunge și la ei (și invers) | ||
| </note> | </note> | ||
| Line 478: | Line 500: | ||
| Test: | Test: | ||
| - | * Trimite mesaje între instanțe | + | * Trimite mesaje între instanțe (publisher/subscriber) |
| - | * Observă că brokerul rutează mesajele automat | + | * Observă că brokerul rutează mesajele automat pe baza topic-ului, indiferent de câte instanțe de publisher sau subscriber sunt conectate la broker |