Java: créez rapidement une requête Http basée sur fluent-hc, associée à une sécurité intégrée pour effectuer une nouvelle tentative anormale

Dépendances requises

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>fluent-hc</artifactId>
            <version>4.5.10</version>
        </dependency>
         <dependency>
            <groupId>net.jodah</groupId>
            <artifactId>failsafe</artifactId>
            <version>2.3.1</version>
        </dependency>

Fluent-hc est utilisé pour générer des requêtes http, et la sécurité est utilisée pour définir une nouvelle tentative d'échec de sécurité. La soi-disant nouvelle tentative d'échec de sécurité signifie en fait qu'une certaine tâche a échoué, mais cela n'a pas d'importance. Nous voyons que plusieurs tentatives peuvent être fait, comme certains échecs de connexion, etc. . .

Failsafe pour atteindre l'échec de sécurité

Vous pouvez configurer l'exception interceptée, retarder la nouvelle tentative et le nombre de tentatives

    private final RetryPolicy<Object> retryPolicy = new RetryPolicy<>()
            //如果获得这个异常,则执行重试
            .handle(SocketTimeoutException.class)
            //延迟俩秒
            .withDelay(Duration.ofSeconds(2))
            //最多尝试俩次
            .withMaxRetries(2);

Élargir les connaissances

1. Basculement: Basculement
signifie "basculement", qui est un mode de fonctionnement de sauvegarde. Lorsque le composant principal est anormal, sa fonction est transférée au composant de sauvegarde. Le point principal est qu'il y a un maître et une sauvegarde, et la sauvegarde peut être activée lorsque le maître échoue et définie comme maître. Par exemple, dans le mode dual-master de Mysql, lorsque le maître utilisé échoue, le maître de secours peut être utilisé comme maître.
2. échec: l'échec rapide est
littéralement «échec rapide», autant que possible pour trouver des erreurs dans le système, afin que le système puisse Selon l'exécution du processus d'erreur préréglé, la méthode correspondante est «tolérante aux pannes (tolérance aux pannes)». Prenons l'exemple de l'échec rapide de la collection JAVA (Collection). Lorsque plusieurs threads opèrent sur le contenu de la même collection, un événement échouant peut se produire. Par exemple: lorsqu'un thread A traverse une collection via un itérateur, si le contenu de la collection est modifié par d'autres threads; alors lorsque le thread A accède à la collection, il lèvera une exception ConcurrentModificationException (trouvé que la mauvaise exécution est définie Mauvais processus) , un événement Fail-Fast est généré.
3. Restauration automatique: récupération automatique
après une panne . Dans un système de réseau en cluster (un réseau avec deux serveurs ou plus interconnectés), parce qu'un serveur doit être réparé, les ressources et services réseau doivent être temporairement redirigés vers le système de sauvegarde. Après cela, le processus de restauration des ressources réseau et des serveurs sur l'hôte d'origine est appelé récupération automatique
4. sécurité intégrée:
Fail-Safe signifie «sécurité intégrée», qui ne causera aucun dommage même en cas de panne ou de minimisation des dommages. Un exemple frappant sur Wikipédia est le "module de surveillance des conflits" des feux de signalisation, lorsqu'il détecte une erreur ou un signal de conflit, il transforme les feux de signalisation à l'intersection en un mode d'erreur clignotant au lieu de tous les afficher sous forme de feux verts.

Créer une demande Get

        //传入重试机制
        String content = Failsafe.with(retryPolicy).get(() ->
                //构建一个get请求
                //请求connectTimeout()设置连接超时
                //socketTimeout() 设置文本读取超时
                //execut() 执行远程连接的核心方法,就是发起一个HttpRequest并返回一个HttpResponse
                //returnContent() 获取返回请求结果Content,其实也就是流文本
                Request.Get(url)
                        .connectTimeout(1000)
                        .socketTimeout(500)
                        .execute().returnContent().asString()
        );

connectTimeout () définit le délai d'expiration de la connexion
socketTimeout () définit le délai d'expiration de la lecture du texte
execute () La méthode principale pour exécuter une connexion à distance consiste à lancer une HttpRequest et à renvoyer une HttpResponse
returnContent () Obtenir le résultat de la requête renvoyée Content, qui est en fait le flux texte

Créer une demande de publication

        String content = Failsafe.with(retryPolicy).get(() ->
                //构建一个post请求
                //请求体body可以使用方法bodyString()按照文本格式传入即可
                // 如:json字符串的文本类型APPLICATION_JSON
                //设置连接时间和文本读取时间,
                //execute执行这个请求获得respond
                Request.Post(h5Url)
                        .bodyString(dataJson, ContentType.APPLICATION_JSON)
                        .connectTimeout(DEFAULT_CONNECT_TIMEOUT)
                        .socketTimeout(DEFAULT_SOCKET_TIMEOUT)
                        .execute().returnContent().asString()
        );

Il existe quelques méthodes supplémentaires fréquemment utilisées, méthode
bodyForm () pour construire la soumission de formulaire.

        .bodyForm(Form.form().add("username", "vip").add("password", "secret").build())

Selon la nécessité de renvoyer différents types de texte asBytes (), asString (), prend également en charge l'écriture directe dans le fichier saveContent ()

.saveContent(new File("result.dump")); //保存为文件

Traitement des réponses personnalisées

Comme mentionné ci-dessus, un objet HttpResponse est obtenu après l'exécution de execut (), et la méthode handleResponse () peut être utilisée pour personnaliser le traitement des réponses.

Document result = Request.Get(url)
        .execute().handleResponse(new ResponseHandler<Document>() {
    
    

    public Document handleResponse(final HttpResponse response) throws IOException {
    
    ...}
    });

Avantages du composant fluent-hc: L'
essence de fluent-hc est d'encapsuler HttpClient, le fonctionnement de la chaîne est simple, facile à interpréter,
pas besoin de gérer la gestion des connexions et l'allocation des ressources, la
technologie du pool de connexions réduit la surcharge des ressources et améliore les performances

L'objet de l'exécuteur est l'objet HttpClient obtenu à partir du pool de connexions. L'utilisation de la technologie de pool de connexions HTTP réduit la surcharge de temps liée à l'établissement de connexions HTTP fréquentes, réduit le gaspillage de ressources côté serveur de communication socket lorsque les connexions TCP sont établies et libérées, et prend en charge une plus grande concurrence.

Je suppose que tu aimes

Origine blog.csdn.net/Shangxingya/article/details/114118352
conseillé
Classement