J'ai une application de démarrage de printemps qui s'appuie sur divers services tels que KeyCloak, ELASTIC Stack et PostgreSQL. Cette application sera déployée sur un cluster Kubettes avec un certain nombre d'autres applications. Est-il possible de faire en sorte que ma demande soit tolérante des services qui pourraient ne pas être disponibles? Imaginez si PostgreSQL n'était pas debout au démarrage. Puis-je forcer l'application à démarrer dans un état dégradé, notifiant l'utilisateur, enregistrer l'erreur et notifier toute application appelante de la dégradation du service? Il serait également utile s'il pouvait réessayer automatiquement de telles haricots à un intervalle. P>
3 Réponses :
Ne vous demandez-vous pas de @retryable et @Recover? Il y a aussi @lazy, mais les 2 premiers sont probablement exactement ce que vous voulez. Cela suppose que vos haricots n'ont pas réessayé intégré. C'est-à-dire Les haricots de Kafka se réessayent automatiquement. Si vous parlez aux API de repos, j'utiliserais probablement quelque chose comme Eureka, un disjoncteur, etc. P>
Fantastique, je pense que c'est exactement ce que je cherche. Merci pour ton aide!
Cela ne répondra pas à votre question complètement. Mais pour la base de données, il est possible de démarrer le démarrage de printemps avec la base de données indisponible. Si vous utilisez Hikari , puis vous pouvez configurer le pool de connexion afin qu'il n'essaiera pas de se connecter au Base de données sur le démarrage.
@Bean public DataSource xxxDataSource() { HikariConfig config = new HikariConfig(); config.setDriverClassName("org.postgresql.Driver"); config.setUsername("user"); config.setPassword("password"); config.setJdbcUrl("jdbc-url"); config.setMaximumPoolSize(5); config.setInitializationFailTimeout(-1); // <-- This line here is what you need return new HikariDataSource(config); }
Oui, j'ai pensé à faire cela, mais je ne voulais pas vraiment créer des gestionnaires pour chaque service externe. Mais je suppose, dans une certaine mesure, c'est inévitable. Je pense que ce que je cherche, c'est exactement ce que suggère @sgledgehammer. Merci!
Votre question est vague et trop large dans la portée. Cela n'est pas possible si vous utilisez des données de ressort, car les données de ressort tenteront de se connecter à la DB au démarrage et d'échouer si cela ne peut pas. Vous pouvez vous connecter vous-même, mais vous devrez penser à la connexion plus tard, les tentatives, l'expérience client, des choses comme ça. P>
Si vous voulez une analyse approfondie, reportez-vous à My Blog Post; Il est écrit pour la base de données CouchBase, mais aborde le même cas d'utilisation que le vôtre. https://blog.asarkar.com/technique/couchbase-kubernettes/ < / p>
Je suis conscient que ma question était large, mais c'était par conception. Je voulais savoir s'il y avait une solution fondée sur le cadre à ce qui devrait être un problème commun à de nombreux services externes. Je pense que la réponse donnée par Sledgehammer est exactement ce que je cherche.
@Dave questions qui sont vagues "par conception" finissent par se fermer par la conception. Donc, si vous avez déjà trouvé une réponse utile, bon pour vous.
Oui, c'est possible, tout est possible. Que ce soit une si bonne idée est une autre affaire.
@Jasgarov S'il y avait une émoticône de rire dans ce que je l'utiliserais. Je pense que le vote au bas est un peu dur cependant.
@Dave Yeah, surtout depuis que l'équipe de printemps s'est sortie de leur chemin pour construire cette fonctionnalité lol.