You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
3.1 KiB
Markdown
94 lines
3.1 KiB
Markdown
|
1 year ago
|
Pour créer deux micro-services Python qui communiquent via RabbitMQ, vous pouvez suivre les étapes suivantes. Nous allons créer un producteur (producer) et un consommateur (consumer). Le producteur enverra des messages à une file d'attente RabbitMQ, et le consommateur lira ces messages.
|
||
|
|
|
||
|
|
### Prérequis
|
||
|
|
|
||
|
|
1. **Installer RabbitMQ**: Assurez-vous que RabbitMQ est installé et en cours d'exécution sur votre machine. Vous pouvez télécharger RabbitMQ depuis [le site officiel](https://www.rabbitmq.com/download.html).
|
||
|
|
|
||
|
|
2. **Installer les bibliothèques Python nécessaires**: Vous aurez besoin de la bibliothèque `pika` pour interagir avec RabbitMQ. Vous pouvez l'installer via pip:
|
||
|
|
```sh
|
||
|
|
pip install pika
|
||
|
|
```
|
||
|
|
|
||
|
|
### Producteur (Producer)
|
||
|
|
|
||
|
|
Créez un fichier nommé `producer.py` avec le contenu suivant:
|
||
|
|
|
||
|
|
```python
|
||
|
|
import pika
|
||
|
|
|
||
|
|
def main():
|
||
|
|
# Connexion à RabbitMQ
|
||
|
|
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
|
||
|
|
channel = connection.channel()
|
||
|
|
|
||
|
|
# Déclaration de la file d'attente
|
||
|
|
channel.queue_declare(queue='hello')
|
||
|
|
|
||
|
|
# Envoi de messages
|
||
|
|
for i in range(10):
|
||
|
|
message = f"Hello World {i}"
|
||
|
|
channel.basic_publish(exchange='',
|
||
|
|
routing_key='hello',
|
||
|
|
body=message)
|
||
|
|
print(f" [x] Sent {message}")
|
||
|
|
|
||
|
|
# Fermeture de la connexion
|
||
|
|
connection.close()
|
||
|
|
|
||
|
|
if __name__ == '__main__':
|
||
|
|
main()
|
||
|
|
```
|
||
|
|
|
||
|
|
### Consommateur (Consumer)
|
||
|
|
|
||
|
|
Créez un fichier nommé `consumer.py` avec le contenu suivant:
|
||
|
|
|
||
|
|
```python
|
||
|
|
import pika
|
||
|
|
|
||
|
|
def callback(ch, method, properties, body):
|
||
|
|
print(f" [x] Received {body}")
|
||
|
|
|
||
|
|
def main():
|
||
|
|
# Connexion à RabbitMQ
|
||
|
|
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
|
||
|
|
channel = connection.channel()
|
||
|
|
|
||
|
|
# Déclaration de la file d'attente
|
||
|
|
channel.queue_declare(queue='hello')
|
||
|
|
|
||
|
|
# Configuration du consommateur
|
||
|
|
channel.basic_consume(queue='hello',
|
||
|
|
on_message_callback=callback,
|
||
|
|
auto_ack=True)
|
||
|
|
|
||
|
|
print(' [*] Waiting for messages. To exit press CTRL+C')
|
||
|
|
channel.start_consuming()
|
||
|
|
|
||
|
|
if __name__ == '__main__':
|
||
|
|
main()
|
||
|
|
```
|
||
|
|
|
||
|
|
### Exécution
|
||
|
|
|
||
|
|
1. **Démarrer RabbitMQ**: Assurez-vous que le serveur RabbitMQ est en cours d'exécution.
|
||
|
|
|
||
|
|
2. **Exécuter le consommateur**: Ouvrez un terminal et exécutez le consommateur:
|
||
|
|
```sh
|
||
|
|
python consumer.py
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **Exécuter le producteur**: Ouvrez un autre terminal et exécutez le producteur:
|
||
|
|
```sh
|
||
|
|
python producer.py
|
||
|
|
```
|
||
|
|
|
||
|
|
Vous devriez voir les messages envoyés par le producteur être reçus et affichés par le consommateur.
|
||
|
|
|
||
|
|
### Explication
|
||
|
|
|
||
|
|
- **Producer**: Le producteur se connecte à RabbitMQ, déclare une file d'attente nommée `hello`, et envoie 10 messages à cette file d'attente.
|
||
|
|
- **Consumer**: Le consommateur se connecte à RabbitMQ, déclare la même file d'attente `hello`, et commence à consommer les messages de cette file d'attente. Chaque message reçu est affiché dans la console.
|
||
|
|
|
||
|
|
Ces deux micro-services communiquent via RabbitMQ, ce qui permet une communication asynchrone et fiable entre eux.
|