# RabbitMQ - Didacticiels

## Comment provisionner un PaaS RabbitMQ ? <a href="#postgresqlhowtos-commentprovisionnerunpaaspostgresql" id="postgresqlhowtos-commentprovisionnerunpaaspostgresql"></a>

Pour commencer, rendez-vous sur ITCare et recherchez votre service global cible où vous créerez votre nouveau cluster RabbitMQ.

Recherchez votre service Global dans la barre de recherche supérieure et cliquez dessus pour afficher sa page d'information.

Une fois dans votre Service Global, cliquez sur le bouton **Créer une ressource**, sélectionnez RabbitMQ et la version requise.

Remplissez le formulaire :

* Sélectionner une topologie
* Définir le nom du futur cluster
* Si topologie Cluster : sélectionner le nombre de broker (3+)
* Le dimensionnement
* Le stockage requis sur chaque broker
* La localisation cible
* Le réseau cible
* Les options de gestion (sauvegarde, surveillance, 24/7, réplication site distant)

Cliquez sur **Suivant** une fois les champs remplis. A l'étape suivante, saisissez le mot de passe du compte super user qui sera fourni puis cliquez sur **Suivant**.

{% hint style="warning" %}
Les mots de passe ne sont pas sauvegardés par cegedim.cloud.

Assurez-vous de sauvegarder votre mot de passe!
{% endhint %}

Réviser la synthèse avant de soumettre le formulaire.

{% hint style="info" %}
Le provisionnement peut prendre jusqu'à 2 heures en fonction de la charge actuelle de l'automatisation.
{% endhint %}

Une fois le déploiement prêt, vous en serez informé par e-mail.

## Démarrer un cluster

En haut de la page du cluster, cliquez sur le bouton **Gérer**, puis sur **Démarrer** et confirmez.

{% hint style="info" %}
Le démarrage d'un cluster démarre toutes les machines virtuelles attachées au cluster.
{% endhint %}

Une notification par courriel sera envoyée lorsque le service sera activé.

## Arrêter un cluster

En haut de la page du cluster, cliquez sur le bouton **Gérer**, puis sur **Stop**.

Saisissez un numéro RFC pour le suivi (facultatif). Cliquez sur **Soumettre**.

{% hint style="warning" %}
L'arrêt d'un cluster arrêtera toutes les machines virtuelles attachées au cluster et la surveillance sera désactivée.
{% endhint %}

Une notification par courrier électronique sera envoyée lorsque le cluster sera arrêté.

## Redimensionner les nœuds

En haut de la page du cluster, cliquez sur le bouton **Gérer**, puis sur **Redimensionner**.

Sélectionnez les nœuds que vous souhaitez redimensionner et sélectionnez la nouvelle taille (cpu/ram).

{% hint style="info" %}
Chaque nœud sera redimensionné et redémarré de manière séquentielle.
{% endhint %}

Une notification par courriel sera envoyée lorsque tous les nœuds auront été redimensionnés.

## Supprimer un cluster

En haut de la page du cluster, cliquez sur le bouton **Gérer**, puis sur **Supprimer**. Cette action arrêtera et supprimera toutes les machines virtuelles.

{% hint style="danger" %}
Veuillez noter que cette action n'est pas récupérable!
{% endhint %}

Saisissez un numéro RFC pour le suivi (facultatif), puis cliquez sur **Soumettre**.

Une notification par courriel sera envoyée lorsque le cluster sera supprimé.

## Gérer un cluster

### Interface utilisateur de gestion

Une fois que votre déploiement est prêt, vous pouvez accéder à l'interface utilisateur de gestion de votre déploiement à partir d'ITCare.

Ce lien est disponible dans le panneau "**Configuration"** de votre déploiement.

### API HTTP <a href="#rabbitmqhowtos-apihttp" id="rabbitmqhowtos-apihttp"></a>

RabbitMQ peut également être géré via une API.

Une fois que vous avez obtenu le lien vers votre interface de gestion, l'API est disponible en ajoutant simplement /api à la fin de l'URL.

Pour obtenir plus d'informations sur l'utilisation de l'API, veuillez consulter la documentation ci-dessous.

{% embed url="<https://www.rabbitmq.com/management.html#http-api>" %}

## Comment produire des messages en Python ?

Cette section fournit des exemples de code Python pour produire des messages vers une queue simple ou une queue de quorum.

Bien sûr, vous pouvez utiliser le langage de développement de votre choix ou n'importe quel middleware qui supporte AMQP.

En outre, si AMQPS est activé (TLS/SSL), une configuration supplémentaire est nécessaire. Il y a aussi un exemple pour cela.

### File d'attente simple <a href="#rabbitmqhowtos-filedattentesimple" id="rabbitmqhowtos-filedattentesimple"></a>

{% code overflow="wrap" lineNumbers="true" %}

```python
#!/usr/bin/python3
import pika
 
credentials = pika.PlainCredentials('user','password')
connection = pika.BlockingConnection(
    pika.ConnectionParameters(host='hostname', credentials=credentials))
channel = connection.channel()
 
channel.queue_declare(queue='simple-queue')
 
channel.basic_publish(exchange="", routing_key='simple-queue', body='Hello World!')
print(" [x] Sent 'Hello World!'")
 
connection.close()
```

{% endcode %}

### File d'attente Quorum <a href="#rabbitmqhowtos-filedattenteduquorum" id="rabbitmqhowtos-filedattenteduquorum"></a>

{% hint style="success" %}
Fortement recommandé dans une configuration en cluster pour une résilience maximale !
{% endhint %}

{% code overflow="wrap" lineNumbers="true" %}

```python
#!/usr/bin/python3
import pika
 
credentials = pika.PlainCredentials('user','password')
connection = pika.BlockingConnection(
pika.ConnectionParameters(host='hostname', credentials=credentials))
channel = connection.channel()
 
channel.queue_declare(queue="quorum-queue",durable=True,arguments={"x-queue-type": "quorum"})
 
channel.basic_publish(exchange="", routing_key='quorum-queue', body='Hello World!')
print(" [x] Sent 'Hello World!'")
 
connection.close()
```

{% endcode %}

### AMQPS <a href="#rabbitmqhowtos-amqps" id="rabbitmqhowtos-amqps"></a>

Lorsque TLS/SSL est activé pour le protocole AMQP, le certificat doit être géré soit en le déclarant, soit en l'ajoutant à votre magasin de certificats.

{% code overflow="wrap" lineNumbers="true" %}

```python
#!/usr/bin/python3
import pika
import ssl
import logging

logging.basicConfig(level=logging.INFO)
context = ssl.create_default_context(cafile="/path/to/certificate/my-certificate.pem")
ssl_options = pika.SSLOptions(context, "hostname")
credentials = pika.PlainCredentials('user','password')
conn_params = pika.ConnectionParameters(host='hostname', port=5671, ssl_options=ssl_options, credentials=credentials)

with pika.BlockingConnection(conn_params) as conn:
    ch = conn.channel()
    ch.queue_declare(queue="quorum-queue",durable=True,arguments={"x-queue-type": "quorum"})
    ch.basic_publish(exchange="", routing_key='quorum-queue', body='Hello World!')
    print(" [x] Sent 'Hello World!'")
```

{% endcode %}

## Comment consommer des messages en Python ?

Cette section fournit des exemples de code Python pour consommer des messages.

{% code overflow="wrap" lineNumbers="true" %}

```python
#!/usr/bin/python3
import pika, sys, os
 
def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)
 
def main():
    credentials = pika.PlainCredentials('user','password')
    connection = pika.BlockingConnection(pika.ConnectionParameters(host='hostname', credentials=credentials))
 
    channel = connection.channel()
 
    # Simple queue
    # channel.queue_declare(queue='hello')
    # channel.basic_consume(queue="hello", on_message_callback=callback, auto_ack=True)
 
    # Quorum queue
    channel.queue_declare(queue="quorum-queue",durable=True,arguments={"x-queue-type": "quorum"})
    channel.basic_consume(queue="quorum-queue", on_message_callback=callback, auto_ack=True)
 
    print(' [*] Waiting for messages. To exit press CTRL+C')
    channel.start_consuming()
 
if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        print('Interrupted')
        try:
            sys.exit(0)
        except SystemExit:
            os._exit(0)
```

{% endcode %}
