Differences

This shows you the differences between two versions of the page.

Link to this comparison view

isi:laboratoare:07 [2025/11/15 20:06]
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 258: Line 258:
  
 == Exemplu de Utilizare a unui Exchange ''​fanout''​ în RabbitMQ == == Exemplu de Utilizare a unui Exchange ''​fanout''​ în RabbitMQ ==
 +
 +<spoiler click here>
 +
 Până acum am văzut cum putem crea o coadă (queue), să trimitem un mesaj pe aceasta și să consumăm acel mesaj. În cadrul exemplului anterior, am presupus că un mesaj este trimis către o singură coadă. În ceea ce urmează, vom face ceva complet diferit – vom livra un mesaj către mai mulți consumatori (îl vom publica pe mai multe queue-uri). Acest pattern este cunoscut sub denumirea de **„publish/​subscribe”**. Până acum am văzut cum putem crea o coadă (queue), să trimitem un mesaj pe aceasta și să consumăm acel mesaj. În cadrul exemplului anterior, am presupus că un mesaj este trimis către o singură coadă. În ceea ce urmează, vom face ceva complet diferit – vom livra un mesaj către mai mulți consumatori (îl vom publica pe mai multe queue-uri). Acest pattern este cunoscut sub denumirea de **„publish/​subscribe”**.
  
Line 305: 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 327: Line 329:
  
 </​code>​ </​code>​
- 
- 
  
 **Rezultatul Așteptat** **Rezultatul Așteptat**
  
 - Mesajul „Salut tuturor consumatorilor!” va ajunge atât în ''​queue1'',​ cât și în ''​queue2''​. - Mesajul „Salut tuturor consumatorilor!” va ajunge atât în ''​queue1'',​ cât și în ''​queue2''​.
 +
 +</​spoiler>​
 +
  
 <note tip> <note tip>
Line 345: 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 352: 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 377: 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 400: 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 407: 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 421: 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 434: 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 460: 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 474: 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
  
  
isi/laboratoare/07.1763229964.txt.gz · Last modified: 2025/11/15 20:06 by alexandru.predescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0