Files
mic-after-work-server-impl-…/REALTIME_DEV.md
2026-02-04 01:06:17 +00:00

4.8 KiB
Raw Permalink Blame History

Temps réel en développement (Kafka + WebSocket)

Ce guide permet de faire fonctionner les notifications / présence / réactions / chat en temps réel en environnement de développement.

Architecture

Services métier → Kafka (topics) → Bridges → WebSocket → Client Flutter
  • Topics Kafka : notifications, chat.messages, reactions, presence.updates
  • WebSocket : ws://<backend>/notifications/<userId> (et /chat/<userId> pour le chat)

1. Démarrer Kafka en local

Un conteneur Kafka doit être joignable sur le port 9092 depuis la machine où tourne Quarkus.

Option A : Conteneur existant

Si vous avez déjà un conteneur Kafka (ex. ID e100552d0da2...) :

  • Vérifiez que le port 9092 est exposé vers lhôte :
    docker port <container_id_or_name> 9092
    
  • Si rien nest mappé, recréez le conteneur avec -p 9092:9092 ou dans un docker-compose :
    kafka:
      image: apache/kafka-native:latest  # ou quay.io/strimzi/kafka:latest, etc.
      ports:
        - "9092:9092"
      # ... reste de la config (KAFKA_CFG_..., etc.)
    

Option B : Lancer Kafka avec Docker (exemple minimal)

docker run -d --name kafka-dev -p 9092:9092 \
  -e KAFKA_NODE_ID=1 \
  -e KAFKA_PROCESS_ROLES=broker,controller \
  -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093 \
  apache/kafka-native:latest

(Adaptez limage et les variables à votre setup si vous en utilisez un autre.)

Depuis une autre machine / Docker

  • Quarkus sur lhôte, Kafka dans Docker : localhost:9092 suffit si le port est mappé (-p 9092:9092).
  • Quarkus dans Docker, Kafka sur lhôte : utilisez host.docker.internal:9092 (Windows/Mac) ou lIP de lhôte.
  • Définir alors :
    export KAFKA_BOOTSTRAP_SERVERS=localhost:9092
    
    (ou host.docker.internal:9092 selon le cas).

2. Démarrer le backend Quarkus (profil dev)

cd mic-after-work-server-impl-quarkus-main
mvn quarkus:dev

Le fichier application-dev.properties utilise par défaut localhost:9092.
En cas derreur de connexion Kafka au démarrage, vérifiez que Kafka écoute bien sur 9092 et que KAFKA_BOOTSTRAP_SERVERS pointe vers ce broker.

Logs utiles au démarrage :

  • [KAFKA-BRIDGE] Bridge démarré pour topic: notifications
  • Pas dexception type ConfigException / « No resolvable bootstrap urls »

Quand une notification est publiée et consommée :

  • [KAFKA-BRIDGE] Événement reçu: type=... userId=...
  • [WS-NEXT] Notification envoyée à <userId> (Succès: 1, Échec: 0)

3. Configurer lapp Flutter (URL du backend)

Le client doit pouvoir joindre le HTTP et le WebSocket du même backend.

  • Émulateur Android : souvent http://10.0.2.2:8080 (puis WebSocket ws://10.0.2.2:8080/notifications/<userId>).
  • Appareil physique / même réseau : IP de la machine qui fait tourner Quarkus, ex. http://192.168.1.103:8080.
  • Chrome / web : http://localhost:8080 si Flutter web et Quarkus sont sur la même machine.

Définir cette URL comme base API (elle est aussi utilisée pour le WebSocket) :

  • Au run :
    flutter run --dart-define=API_BASE_URL=http://<VOTRE_IP_OU_HOST>:8080
    
  • Ou dans lib/core/constants/env_config.dart (valeur par défaut en dev).

Important : pas de slash final dans API_BASE_URL (ex. http://192.168.1.103:8080).

4. Vérifier que le temps réel fonctionne

  1. Connexion WebSocket

    • Se connecter dans lapp avec un utilisateur.
    • Côté Flutter : log du type « Connecté avec succès au service de notifications ».
    • Côté Quarkus : [WS-NEXT] Connexion ouverte pour l'utilisateur: <userId>.
  2. Notification (ex. demande dami / post)

    • Déclencher une action qui crée une notification (autre compte ou service).
    • Côté Quarkus : [KAFKA-BRIDGE] Événement reçu puis [WS-NEXT] Notification envoyée à ....
    • Côté Flutter : la notification doit apparaître sans recharger (si lécran écoute le stream temps réel).
  3. Si rien narrive

    • Kafka : le broker est-il bien sur le port 9092 ? KAFKA_BOOTSTRAP_SERVERS correct ?
    • WebSocket : lURL dans lapp est-elle exactement celle du backend (même hôte/port) ?
    • CORS : pour Flutter web, le backend doit autoriser lorigine de lapp (déjà géré dans la config actuelle si vous navez pas changé lorigine).

5. Résumé des variables utiles (dev)

Variable Rôle Exemple
KAFKA_BOOTSTRAP_SERVERS Broker Kafka pour Quarkus localhost:9092 ou host.docker.internal:9092
API_BASE_URL (Flutter) Base HTTP + WS du backend http://192.168.1.103:8080

Aucune régression fonctionnelle nest introduite par ce guide : seules la configuration dev et le format des messages WebSocket (timestamp/type dans data) ont été alignés pour le client.