HTTP-ügyfelek és folyamatok a Java Azure SDK-ban
Ez a cikk áttekintést nyújt a HTTP-ügyfél- és folyamatfunkciók használatáról a Java Azure SDK-ban. Ez a funkció konzisztens, hatékony és rugalmas élményt nyújt a Java-kódtárakhoz készült Azure SDK-t használó fejlesztők számára.
HTTP-ügyfelek
Az Azure SDK for Java absztrakcióval HttpClient
implementálható. Ez az absztrakció olyan csatlakoztatható architektúrát tesz lehetővé, amely több HTTP-ügyfélkódtárat vagy egyéni implementációt fogad el. A legtöbb felhasználó függőségkezelésének egyszerűsítése érdekében azonban minden Azure-ügyfélkódtár függ.azure-core-http-netty
Ezért a Netty HTTP-ügyfél az összes Java-kódtárhoz készült Azure SDK-ban használt alapértelmezett ügyfél.
Bár a Netty az alapértelmezett HTTP-ügyfél, az SDK három ügyfél-implementációt biztosít attól függően, hogy milyen függőségek vannak már a projektben. Ezek a megvalósítások a következőkre használhatók:
Megjegyzés:
A JDK HttpClient
és a Java-hoz készült Azure SDK együttes használata csak a JDK 12-s és újabb verzióiban támogatott.
Az alapértelmezett HTTP-ügyfél cseréje
Ha egy másik implementációt szeretne, a Netty függőségét úgy távolíthatja el, hogy kizárja azt a buildkonfigurációs fájlokból. Egy Maven pom.xml fájlban kizárja a Netty-függőséget, és belefoglal egy másik függőséget.
Az alábbi példa bemutatja, hogyan zárhatja ki a Netty-függőséget a azure-security-keyvault-secrets
tár valódi függőségéből. Mindenképpen zárja ki a Nettyt az összes megfelelő com.azure
kódtárból, ahogy az itt látható:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-security-keyvault-secrets</artifactId>
<version>4.2.2.</version>
<exclusions>
<exclusion>
<groupId>com.azure</groupId>
<artifactId>azure-core-http-netty</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-core-http-okhttp</artifactId>
<version>1.3.3</version>
</dependency>
Megjegyzés:
Ha eltávolítja a Netty-függőséget, de nem biztosít implementációt a helyén, az alkalmazás nem indul el. Az HttpClient
osztályúton implementációnak kell lennie.
HTTP-ügyfelek konfigurálása
Szolgáltatásügyfél létrehozásakor alapértelmezés szerint a következőt használja HttpClient.createDefault()
: . Ez a metódus egy alapszintű HttpClient
példányt ad vissza a megadott HTTP-ügyfél-implementáció alapján. Ha összetettebb HTTP-ügyfélre , például proxyra van szüksége, minden implementáció kínál egy szerkesztőt, amely lehetővé teszi egy konfigurált példány összeállítását HttpClient
. Az építők, NettyAsyncHttpClientBuilder
OkHttpAsyncHttpClientBuilder
és JdkAsyncHttpClientBuilder
.
Az alábbi példák bemutatják, hogyan hozhat létre HttpClient
példányokat a Netty, az OkHttp és a JDK 11 HTTP-ügyfél használatával. Ezek a példányok proxyt adnak áthttp://localhost:3128
, és felhasználói példán keresztül hitelesítik a weakPassword jelszóval.
// Netty
HttpClient httpClient = new NettyAsyncHttpClientBuilder()
.proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("localhost", 3128))
.setCredentials("example", "weakPassword"))
.build();
// OkHttp
HttpClient httpClient = new OkHttpAsyncHttpClientBuilder()
.proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("localhost", 3128))
.setCredentials("example", "weakPassword"))
.build();
// JDK 11 HttpClient
HttpClient client = new JdkAsyncHttpClientBuilder()
.proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("localhost", 3128))
.setCredentials("example", "weakPassword"))
.build();
Most már átadhatja a létrehozott HttpClient
példányt egy szolgáltatásügyfél-készítőnek, hogy ügyfélként használhassa a szolgáltatással való kommunikációhoz. Az alábbi példa az új HttpClient
példányt használja egy Azure Storage Blob-ügyfél létrehozásához.
BlobClient blobClient = new BlobClientBuilder()
.connectionString(<connection string>)
.containerName("container")
.blobName("blob")
.httpClient(httpClient)
.build();
Felügyeleti kódtárak esetén beállíthatja a HttpClient
Manager-konfiguráció során.
AzureResourceManager azureResourceManager = AzureResourceManager.configure()
.withHttpClient(httpClient)
.authenticate(credential, profile)
.withDefaultSubscription();
HTTP-folyamat
A HTTP-folyamat az azure-hoz készült Java-ügyfélkódtárak konzisztenciájának és diagnosztikájának egyik fő összetevője. A HTTP-folyamatok a következőkből állnak:
- HTTP-átvitel
- HTTP-folyamat szabályzatai
Ügyfél létrehozásakor saját egyéni HTTP-folyamatot is megadhat. Ha nem ad meg egy folyamatot, az ügyfélkódtár létrehoz egy konfiguráltat az adott ügyfélkódtár használatához.
HTTP-átvitel
A HTTP-átvitel feladata a kiszolgálóhoz való kapcsolódás, valamint a HTTP-üzenetek küldése és fogadása. A HTTP-átvitel képezi az Azure SDK-ügyfélkódtárak átjáróját az Azure-szolgáltatások használatához. Amint azt a cikk korábbi részében is említettük, a Java Azure SDK alapértelmezés szerint a Netty-t használja a HTTP-átvitelhez. Az SDK azonban csatlakoztatható HTTP-átvitelt is biztosít, így szükség esetén más implementációkat is használhat. Az SDK emellett két további HTTP-átviteli implementációt is biztosít az OkHttp és a JDK 11-es és újabb JDK-val rendelkező HTTP-ügyfél számára.
HTTP-folyamat szabályzatai
A folyamatok az egyes HTTP-kérés-válasz kerekítésekhez végrehajtott lépések sorozatából állnak. Minden szabályzatnak van egy dedikált célja, és egy kérésre, válaszra vagy néha mindkettőre reagál. Mivel minden ügyfélkódtár szabványos "Azure Core" réteggel rendelkezik, ez a réteg biztosítja, hogy az egyes szabályzatok sorrendben futnak a folyamatban. Amikor kérést küld, a szabályzatok a folyamathoz adott sorrendben futnak. Amikor választ kap a szolgáltatástól, a szabályzatok fordított sorrendben futnak. A folyamathoz hozzáadott összes szabályzat végrehajtása a kérés elküldése előtt és a válasz beérkezése után történik. A szabályzatnak el kell döntenie, hogy a kérést, a választ vagy mindkettőt választja-e. Egy naplózási szabályzat például naplózza a kérést és a választ, de a hitelesítési szabályzat csak a kérés módosítására kíváncsi.
Az Azure Core-keretrendszer biztosítja a szabályzat számára a szükséges kérelem- és válaszadatokat, valamint a szabályzat végrehajtásához szükséges környezeteket. A szabályzat ezután végrehajthatja a műveletet a megadott adatokkal, és átadhatja a vezérlőt a folyamat következő szabályzatának.
HTTP-folyamatházirend pozíciója
Ha HTTP-kéréseket küld a felhőszolgáltatásoknak, fontos kezelni az átmeneti hibákat, és újrapróbálkoznia a sikertelen kísérleteket. Mivel ez a funkció gyakori követelmény, az Azure Core egy újrapróbálkozási szabályzatot biztosít, amely figyeli az átmeneti hibákat, és automatikusan újrapróbálkozza a kérést.
Ez az újrapróbálkoztatási szabályzat ezért a teljes folyamatot két részre osztja: az újrapróbálkoztatási szabályzat előtt végrehajtott szabályzatokra és az újrapróbálkozások után végrehajtott szabályzatokra. Az újrapróbálkozási szabályzat előtt hozzáadott szabályzatok API-műveletenként csak egyszer futnak, az újrapróbálkozási szabályzat után hozzáadott szabályzatok pedig az újrapróbálkozási szabályzattal megegyező számú alkalommal futnak.
A HTTP-folyamat létrehozásakor tehát tisztában kell lennie azzal, hogy az egyes kérések újrapróbálkozásakor vagy API-műveletenként egyszer kell-e szabályzatot végrehajtania.
Gyakori HTTP-folyamatszabályzatok
A REST-alapú szolgáltatások HTTP-folyamatai olyan konfigurációkkal rendelkeznek, amelyek hitelesítési, újrapróbálkozási, naplózási, telemetria-, és a kérésazonosítót határozzák meg a fejlécben. Az Azure Core előre be van töltve ezekkel a gyakran szükséges HTTP-szabályzatokkal, amelyeket hozzáadhat a folyamathoz.
Policy | GitHub-hivatkozás |
---|---|
újrapróbálkozési szabályzat | RetryPolicy.java |
hitelesítési szabályzat | BearerTokenAuthenticationPolicy.java |
naplózási szabályzat | HttpLoggingPolicy.java |
kérelemazonosító-szabályzat | RequestIdPolicy.java |
telemetriaszabályzat | UserAgentPolicy.java |
Egyéni HTTP-folyamatszabályzat
A HTTP-folyamat szabályzata kényelmes mechanizmust biztosít a kérés és a válasz módosításához vagy díszítéséhez. Egyéni szabályzatokat adhat hozzá a felhasználó vagy az ügyfélkódtár fejlesztője által létrehozott folyamathoz. Amikor hozzáadja a szabályzatot a folyamathoz, megadhatja, hogy ezt a szabályzatot hívásonként vagy újrapróbálkozásonként kell-e végrehajtani.
Egyéni HTTP-folyamatszabályzat létrehozásához csak ki kell terjesztenie egy alapházirend-típust, és implementálnia kell néhány absztrakt módszert. Ezután csatlakoztathatja a szabályzatot a folyamathoz.
Egyéni fejlécek HTTP-kérelmekben
Az Azure SDK for Java-ügyfélkódtárak konzisztens módon definiálják a testreszabott fejléceket a nyilvános API objektumain keresztül Context
, ahogyan az alábbi példában látható:
// Add your headers
HttpHeaders headers = new HttpHeaders();
headers.set("my-header1", "my-header1-value");
headers.set("my-header2", "my-header2-value");
headers.set("my-header3", "my-header3-value");
// Call API by passing headers in Context.
configurationClient.addConfigurationSettingWithResponse(
new ConfigurationSetting().setKey("key").setValue("value"),
new Context(AddHeadersFromContextPolicy.AZURE_REQUEST_HTTP_HEADERS_KEY, headers));
// The three headers are now be added to the outgoing HTTP request.
További információt az AddHeadersFromContextPolicy osztályban talál.
Alapértelmezett TLS/SSL-kódtár
Alapértelmezés szerint az összes ügyfélkódtár a Tomcat-natív unalmas SSL-kódtár használatával engedélyezi a Natív szintű teljesítményt a TLS/SSL-műveletekhez. Az Unalmas SSL-kódtár egy uber JAR, amely natív kódtárakat tartalmaz Linuxhoz, macOS-hez és Windowshoz, és jobb teljesítményt nyújt a JDK-n belüli alapértelmezett TLS/SSL-implementációhoz képest.
Tomcat-natív TLS/SSL-függőség méretének csökkentése
Alapértelmezés szerint a Tomcat-Native Boring SSL-kódtár uber JAR-ját használják a Java-hoz készült Azure SDK-kban. A függőség méretének csökkentéséhez a függőséget netty-tcnative os
szerinti osztályozóval kell tartalmaznia, ahogyan az az alábbi példában látható:
<project>
...
<dependencies>
...
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-tcnative-boringssl-static</artifactId>
<version>2.0.25.Final</version>
<classifier>${os.detected.classifier}</classifier>
</dependency>
...
</dependencies>
...
<build>
...
<extensions>
<extension>
<groupId>kr.motd.maven</groupId>
<artifactId>os-maven-plugin</artifactId>
<version>1.4.0.Final</version>
</extension>
</extensions>
...
</build>
...
</project>
JDK TLS/SSL használata
Ha inkább az alapértelmezett JDK TLS/SSL-t szeretné használni a Tomcat-Native Boring SSL helyett, akkor ki kell zárnia a Tomcat-natív unalmas SSL-kódtárat. Vegye figyelembe, hogy a tesztek alapján a JDK TLS/SSL teljesítménye 30%-kal lassabb a Tomcat-natív unalmas SSL-hez képest. Használatkor com.azure:azure-core:1.28.0
vagy később a HttpClient
-implementáló kódtár (például com.azure:azure-core-http-netty
) kezeli a Tomcat-Native Boring SSL-függőséget. A függőség kizárásához adja hozzá a következő konfigurációt a POM-fájlhoz:
<project>
...
<dependencies>
...
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-core-http-netty</artifactId>
<version>1.13.6</version>
<exclusions>
<exclusion>
<groupId>io.netty</groupId>
<artifactId>netty-tcnative-boringssl-static</artifactId>
</exclusion>
</exclusions>
</dependency>
...
</dependencies>
...
</project>
További lépések
Most, hogy már ismeri a HTTP-ügyfél funkcióit a Java Azure SDK-ban, megtudhatja, hogyan szabhatja testre a használt HTTP-ügyfelet. További információ: Proxyk konfigurálása a Javához készült Azure SDK-ban.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: