Ekinlikler
17 Mar 23 - 21 Mar 23
Diğer geliştiriciler ve uzmanlarla gerçek dünyadaki kullanım örneklerini temel alan ölçeklenebilir yapay zeka çözümleri oluşturmak için toplantı serisine katılın.
Hemen kaydolunBu tarayıcı artık desteklenmiyor.
En son özelliklerden, güvenlik güncelleştirmelerinden ve teknik destekten faydalanmak için Microsoft Edge’e yükseltin.
Bu makalede, Java için Azure SDK'sı içinde HTTP istemcisi ve işlem hattı işlevselliğini kullanmaya genel bir bakış sağlanır. Bu işlevsellik, tüm Java kitaplıkları için Azure SDK'sını kullanan geliştiriciler için tutarlı, güçlü ve esnek bir deneyim sağlar.
Java için Azure SDK, HttpClient
soyutlama kullanılarak uygulanır. Bu soyutlama, birden çok HTTP istemci kitaplığını veya özel uygulamayı kabul eden eklenebilir bir mimariyi etkinleştirir. Ancak, çoğu kullanıcının bağımlılık yönetimini basitleştirmek için tüm Azure istemci kitaplıkları azure-core-http-netty
bağlıdır. Bu nedenle Netty HTTP istemcisi, Java kitaplıkları için tüm Azure SDK'da kullanılan varsayılan istemcidir.
Netty varsayılan HTTP istemcisi olsa da SDK, projenizde zaten sahip olduğunuz bağımlılıklara bağlı olarak üç istemci uygulaması sağlar. Bu uygulamalar şunlara yöneliktir:
Not
Java için Azure SDK ile birlikte JDK HttpClient
yalnızca JDK 12 ve üzeri sürümlerde desteklenir.
Başka bir uygulama tercih ederseniz, Derleme yapılandırma dosyalarında dışlayarak Netty bağımlılığını kaldırabilirsiniz. Maven pom.xml dosyasında Netty bağımlılığını dışlar ve başka bir bağımlılık eklersiniz.
Aşağıdaki örnek, Netty bağımlılığını azure-security-keyvault-secrets
kitaplığındaki gerçek bir bağımlılığın dışında tutma işlemini gösterir. Netty'yi burada gösterildiği gibi tüm uygun com.azure
kitaplıklarının dışında tutmayı unutmayın:
<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>
Not
Netty bağımlılığını kaldırır ancak yerine uygulama sağlamazsanız, uygulama başlatılamaz. Sınıf yolu üzerinde bir HttpClient
uygulaması bulunmalıdır.
Bir hizmet istemcisi oluşturduğunuzda, varsayılan olarak HttpClient.createDefault()
kullanılır. Bu yöntem, sağlanan HTTP istemci uygulamasını temel alan temel bir HttpClient
örneği döndürür. Ara sunucu gibi daha karmaşık bir HTTP istemcisine ihtiyacınız olması durumunda, her uygulama yapılandırılmış bir HttpClient
örneği oluşturmanıza olanak tanıyan bir oluşturucu sunar. Oluşturucular NettyAsyncHttpClientBuilder
, OkHttpAsyncHttpClientBuilder
ve JdkAsyncHttpClientBuilder
.
Aşağıdaki örneklerde Netty, OkHttp ve JDK 11 HTTP istemcisini kullanarak HttpClient
örnekleri oluşturma gösterilmektedir. Bu örnekler http://localhost:3128
üzerinden proxy kullanır ve kullanıcı example
, parola weakPassword
ile kimlik doğrulaması yapar.
// 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();
Artık, yapılandırılan HttpClient
örneğini hizmetle iletişim kurmak üzere istemci olarak kullanmak üzere bir hizmet istemci oluşturucusuna geçirebilirsiniz. Aşağıdaki örnek, Azure Depolama Blob istemcisi oluşturmak için yeni HttpClient
örneğini kullanır.
BlobClient blobClient = new BlobClientBuilder()
.connectionString(<connection string>)
.containerName("container")
.blobName("blob")
.httpClient(httpClient)
.build();
Yönetim kitaplıkları için, Yönetici yapılandırması sırasında HttpClient
'ı ayarlayabilirsiniz.
AzureResourceManager azureResourceManager = AzureResourceManager.configure()
.withHttpClient(httpClient)
.authenticate(credential, profile)
.withDefaultSubscription();
HTTP işlem hattı, Azure için Java istemci kitaplıklarında tutarlılık ve tanınabilirlik elde etme konusunda önemli bileşenlerden biridir. HTTP işlem hattı şunlardan oluşur:
İstemci oluştururken kendi özel HTTP işlem hattınızı sağlayabilirsiniz. İşlem hattı sağlamazsanız, istemci kitaplığı, özel olarak o istemci kitaplığıyla çalışacak şekilde yapılandırılmış bir tane oluşturur.
HTTP aktarımı, sunucuyla bağlantı kurmaktan ve HTTP iletileri gönderip almaktan sorumludur. HTTP aktarımı, Azure SDK istemci kitaplıklarının Azure hizmetleriyle etkileşime geçmek için ağ geçidini oluşturur. Bu makalede daha önce belirtildiği gibi Java için Azure SDK, HTTP aktarımı için varsayılan olarak Netty kullanır. Ancak SDK, uygun yerlerde diğer uygulamaları kullanabilmeniz için takılabilir bir HTTP aktarımı da sağlar. SDK ayrıca OkHttp ve JDK 11 ve üzeri sürümlerle birlikte gelen HTTP istemcisi için iki http aktarım uygulaması daha sağlar.
İşlem hattı, her HTTP istek yanıtı gidiş dönüş için yürütülen bir dizi adımdan oluşur. Her ilkenin özel bir amacı vardır ve bir istek veya yanıt ya da bazen her ikisi üzerinde de hareket eder. Tüm istemci kitaplıkları standart bir 'Azure Core' katmanına sahip olduğundan, bu katman her ilkenin işlem hattında sırayla yürütülmesini sağlar. bir istek gönderdiğinizde, ilkeler işlem hattına eklenme sırasına göre yürütülür. Hizmetten bir yanıt aldığınızda politikalar ters sırada yürütülür. İşlem hattına eklenen tüm ilkeler, isteği göndermeden önce ve yanıt aldıktan sonra yürütülür. İlkenin, istekte mi, yanıtta mı yoksa her ikisinde de işlem yapacağına karar vermesi gerekir. Örneğin, bir kayıt politikası isteği ve yanıtı kaydeder, ancak kimlik doğrulama politikası yalnızca isteği değiştirmeyle ilgilenir.
Azure Core çerçevesi, ilkeyi yürütmek için gerekli bağlamın yanı sıra gerekli istek ve yanıt verilerini de sağlar. İlke daha sonra belirtilen verilerle işlemini gerçekleştirebilir ve denetimi işlem hattındaki bir sonraki ilkeye geçirebilir.
HTTP işlem hattı diyagramı
Bulut hizmetlerine HTTP istekleri gönderdiğinizde, geçici hataların işlenmesi ve başarısız girişimlerin yeniden denenmesi önemlidir. Bu işlevsellik yaygın bir gereksinim olduğundan, Azure Core geçici hataları izleyebilen ve isteği otomatik olarak yeniden deneyebilen bir yeniden deneme ilkesi sağlar.
Bu yeniden deneme ilkesi, işlem hattının tamamını iki bölüme ayırır: yeniden deneme ilkesinden önce yürütülen ilkeler ve yeniden deneme ilkesinden sonra yürütülen ilkeler. Yeniden deneme ilkesinden önce eklenen ilkeler API işlemi başına yalnızca bir kez yürütülür ve yeniden deneme ilkesinden sonra eklenen ilkeler, yeniden denemeler kadar çok kez yürütülür.
Bu nedenle, HTTP işlem hattını oluştururken, her istek yeniden denemesi için bir ilke yürütmeyi mi yoksa API işlemi başına bir kez mi yürütmeniz gerektiğini anlamanız gerekir.
REST tabanlı hizmetler için HTTP işlem hatlarının kimlik doğrulaması, yeniden denemeler, günlüğe kaydetme, telemetri ve üst bilgide istek kimliğini belirtme ilkelerine sahip yapılandırmaları vardır. Azure Core, işlem hattına ekleyebileceğiniz bu yaygın olarak gerekli HTTP ilkeleriyle önceden yüklenir.
Politika | GitHub bağlantısı |
---|---|
yeniden deneme ilkesi | RetryPolicy.java |
kimlik doğrulama ilkesi | BearerTokenAuthenticationPolicy.java |
kayıt politikası | HttpLoggingPolicy.java |
istek kimliği ilkesi | RequestIdPolicy.java |
telemetri ilkesi | UserAgentPolicy.java |
HTTP işlem hattı ilkesi, isteği ve yanıtı değiştirmek veya süslemek için kullanışlı bir mekanizma sağlar. Kullanıcının veya istemci kitaplığı geliştiricisinin oluşturduğu işlem hattına özel ilkeler ekleyebilirsiniz. İlkeyi işlem hattına eklerken, bu ilkenin çağrı başına mı yoksa yeniden deneme başına mı yürütüleceğini belirtebilirsiniz.
Özel bir HTTP işlem hattı ilkesi oluşturmak için bir temel ilke türünü genişletmeniz ve soyut bir yöntem uygulamanız gerekir. Ardından politikayı işlem hattına takabilirsiniz.
Java için Azure SDK istemci kitaplıkları, aşağıdaki örnekte gösterildiği gibi genel API'deki Context
nesneler aracılığıyla özelleştirilmiş üst bilgileri tanımlamak için tutarlı bir yol sağlar:
// 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.
Daha fazla bilgi için bkz. AddHeadersFromContextPolicy Sınıfı
Varsayılan olarak, tüm istemci kitaplıkları TLS/SSL işlemleri için yerel düzeyde performans sağlamak amacıyla Tomcat'e özgü BoringSSL kitaplığını kullanır. Boring SSL kitaplığı, JDK içindeki varsayılan TLS/SSL uygulamasına kıyasla daha iyi performans sunar ve Linux, macOS ve Windows için yerel kitaplıklar içeren bir uber JAR'dir.
Varsayılan olarak, Java için Azure SDK'larında Tomcat-Native Boring SSL kitaplığının uber JAR'ı kullanılır. Bu bağımlılığın boyutunu küçültmek için, aşağıdaki örnekte gösterildiği gibi bağımlılığı netty-tcnativegöre bir os
sınıflandırıcısına eklemeniz gerekir:
<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>
Tomcat-Native Sıkıcı SSL yerine varsayılan JDK TLS/SSL kullanmayı tercih ediyorsanız, Tomcat'in yerel Sıkıcı SSL kitaplığını dışlamanız gerekir. Testlerimize göre JDK TLS/SSL performansının Tomcat-Native Sıkıcı SSL'ye kıyasla 30% daha yavaş olduğunu unutmayın.
com.azure:azure-core:1.28.0
veya daha sonraki bir sürümü kullandığınızda, HttpClient
'i uygulayan (örneğin, com.azure:azure-core-http-netty
gibi) kitaplık, Tomcat-Native Boring SSL bağımlılığını yönetir. Bağımlılığı dışlamak için POM dosyanıza aşağıdaki yapılandırmayı ekleyin:
<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>
Java için Azure SDK'daki HTTP istemcisi işlevselliğini öğrendiğinize göre, kullandığınız HTTP istemcisini nasıl daha fazla özelleştirebileceğinizi öğrenin. Daha fazla bilgi için bkz. Javaiçin Azure SDK'da proxy'leri yapılandırma
Ekinlikler
17 Mar 23 - 21 Mar 23
Diğer geliştiriciler ve uzmanlarla gerçek dünyadaki kullanım örneklerini temel alan ölçeklenebilir yapay zeka çözümleri oluşturmak için toplantı serisine katılın.
Hemen kaydolunEğitim
Öğrenme yolu
Azure'da Java uygulamaları için en iyi yöntemler - Training
Buradan başlayın ve Azure'da Java uygulamalarını izlemeyi, otomatikleştirmeyi, ayarlamayı, otomatik ölçeklendirmeyi, güvenliğini sağlamayı ve derlemeyi öğrenin. Her zaman olduğu gibi bildiğiniz ve sevdiğiniz araçları ve çerçeveleri kullanın: Spring, Tomcat, WildFly, JBoss, WebLogic, WebSphere, Maven, Gradle, IntelliJ, Eclipse, Jenkins, Terraform ve daha fazlası.
Sertifikasyon
Microsoft Sertifikalı: Azure Geliştirici İş Ortağı - Certifications
Azure İşlevleri oluşturmak, web uygulamalarını uygulamak ve yönetmek, Azure depolamayı kullanan çözümler geliştirmek ve daha fazlasını yapmak için Microsoft Azure'da uçtan uca çözümler oluşturun.
Belgeler
Azure SDK ve Apache Maven ile çalışmaya başlama - Java on Azure
Azure SDK ve Apache Maven kullanarak proje oluşturmayı öğrenin.
Azure'da Java kullanarak bulut geliştirme
Java için Azure SDK'da zaman uyumsuz programlama - Java on Azure
Java için Azure SDK'da zaman uyumsuz programlama modeline genel bakış sağlar.