Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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 egy HttpClient absztrakcióval 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. Annak érdekében, hogy a legtöbb felhasználó számára egyszerűbb legyen a függőségek kezelése, az összes Azure ügyfélkönyvtár azure-core-http-netty-ra támaszkodik. 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.
Fontos
Győződjön meg arról, hogy a azure-core-http-netty függőség verziót vagy újabb verziót 1.15.12 használ. Ha anyagjegyzéket használ, győződjön meg arról, hogy a BOM-verzió legalább 1.2.36.
Ez a minimális verzió szükséges az Azure Resource Manager által a hosszú ideig futó műveletek során visszaadott nagy HTTP-fejlécek engedélyezéséhez.
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:
- Netty
- OkHttp
- A JDK 11-ben bevezetett HttpClient
Jegyzet
A JDK HttpClient a Java-hoz készült Azure SDK-val együtt csak a JDK 12 és újabb verziói támogatják.
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.9.4</version>
<exclusions>
<exclusion>
<groupId>com.azure</groupId>
<artifactId>azure-core-http-netty</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- OkHttp -->
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-core-http-okhttp</artifactId>
<version>1.12.10</version>
</dependency>
<!-- JDK HttpClient -->
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-core-http-jdk-httpclient</artifactId>
<version>1.0.3</version>
</dependency>
Jegyzet
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 osztályúton HttpClient implementációnak kell léteznie.
HTTP-ügyfelek konfigurálása
Szolgáltatásügyfél létrehozásakor a rendszer alapértelmezés szerint HttpClient.createDefault()használ. 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 HttpClient-példány összeállítását. A kivitelező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 HTTP-ügyfél használatával. Ezek a példányok a http://localhost:3128 proxy kapcsolaton keresztül mennek át, és a example felhasználó a(z) weakPasswordjelszóval hitelesíti őket.
// 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 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 a Manager konfigurálása 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 csővezetéket, a klienskönyvtár létrehoz egyet, amely kifejezetten az adott klienskönyvtárral való működéshez van konfigurálva.
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
Egy adatcsatorna az egyes HTTP kérés-válasz ciklushoz végrehajtott lépések sorozatából áll. 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 folyamatba történő beillesztésük sorrendjében hajtódnak végre. 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 a klienskönyvtár fejlesztője által létrehozott csővezetékhez. 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 folyamatlánchoz.
Egyéni fejlécek HTTP-kérelmekben
Az Azure SDK for Java ügyfélkódtárak konzisztens módot biztosítanak a testreszabott fejlécek definiálására Context objektumokon keresztül a nyilvános API-ban, 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élprogram-könyvtár a Tomcat-natív Boring SSL-könyvtár használatával biztosítja 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-Native TLS/SSL-függőség méretének csökkentése
Alapértelmezés szerint a Tomcat-Native Unalmas 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 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 Tomcat-Native unalmas 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% lassabb a Tomcat-Native unalmas SSL-hez képest. Ha com.azure:azure-core:1.28.0 vagy újabb verziót használ, a HttpClient-implementáló kódtár (például com.azure:azure-core-http-netty) kezeli a Tomcat-Native unalmas SSL-függőségét. 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>
Következő 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.