Knock implémente le contrat standard MicroProfile Health 4.0. Le code applicatif écrit contre la spec — HealthCheck, HealthCheckResponse, @Liveness/@Readiness/@Startup — se porte sans modification. L’effort de migration se concentre sur la configuration de build et l’abandon des extensions propres à un fournisseur.

Depuis SmallRye Health

SmallRye Knock Note

Beans HealthCheck

Beans HealthCheck

Identique. Conservez vos classes telles quelles.

@Liveness / @Readiness / @Startup

Mêmes annotations

MicroProfile Health standard. Aucun changement.

Extensions JSON propriétaires / champs supplémentaires

JSON standard uniquement

Knock émet exactement la charge de la spec (status, checks[], data optionnel). Abandonnez les champs non standard.

Contrôles réactifs / Mutiny

HealthCheck synchrone

Knock exécute chaque call() sur un thread virtuel ; aucune API réactive n’est exposée.

Réglages de config mp.health.*

Sans objet

Knock n’a pas de surface de configuration propriétaire ; le comportement suit la spec.

Étapes de migration

  1. Remplacez la dépendance SmallRye Health par knock-api, knock-core, knock-cdi-vauban et knock-jaxrs (voir Référence).

  2. Assurez-vous que chaque HealthCheck à signaler porte un qualificateur de sonde — Knock ignore silencieusement les contrôles non qualifiés (ils ne sont pas enregistrés).

  3. Supprimez les champs de données propriétaires si des consommateurs avals exigeaient la charge stricte de la spec.

  4. Ajoutez un module-info.java requérant microprofile.health.api (Knock est en Java Modules strict).

  5. Vérifiez que les quatre endpoints répondent et que le statut HTTP agrégé est 200/503 comme attendu.

Pièges

  • Contrôles non qualifiés — un HealthCheck sans @Liveness/@Readiness/@Startup est silencieusement ignoré (il n’est pas signalé). Ajoutez le qualificateur manquant pour qu’il soit pris en compte.

  • JSON non standard — les consommateurs s’appuyant sur des champs propriétaires doivent être adaptés ; Knock n’émet que la forme de la spec.

  • Typage de data — seuls String, long, boolean et int sont rendus nativement ; les autres types sont convertis en chaîne.

  • Module path — les clauses requires manquantes apparaissent comme des erreurs de résolution Java Modules plutôt que comme des avertissements de classpath.

Pour aller plus loin