1. Giriş

Cloud Tasks, çok sayıda görevin yürütme, dağıtım ve teslim süreçlerini yönetmek için kullanılan, tümüyle yönetilen bir sıralama hizmetidir.
Cloud Tasks, görev adı verilen ve bağımsız olarak gerçekleştirilebilen (ör. bir veritabanı girişini güncelleme görevi) iş parçalarını ana uygulama akışınızın dışında ayırmanıza ve oluşturduğunuz işleyicileri kullanarak eşzamansız olarak işlenmek üzere göndermenize olanak tanır.
Yükü boşaltılan görev, başarılı bir şekilde yürütülene veya başarısız olana kadar devam eden bir kuyruğa eklenir. Yapılandırmaya bağlı olarak, sıra bir dağıtım akış denetimi olarak da işlev görebilir. Sırayı oluşturup yapılandırır, ardından Cloud Tasks hizmeti tarafından yönetilir. Görevler eklendikten sonra kuyruk, görevleri gönderir ve çalışanların bunları güvenilir bir şekilde işlemesini sağlar.

Cloud Tasks'in temel özelliklerinden bazıları şunlardır:
- HTTP hedefleri: Sektör standardı OAuth/OIDC kimlik doğrulamasını kullanarak Compute Engine, Google Kubernetes Engine, Cloud Run, Cloud Functions veya şirket içi sistemlerde çalışan dilediğiniz HTTP hizmetini hedefleyen görevleri güvenli bir biçimde ekleyin.
- Görevleri tekilleştirme: Birden çok kez eklenen görevler yalnızca bir kez dağıtılır.
- Teslimat garantisi: Görevlerin en az bir kez teslim edileceği ve çoğu görevin tam bir kez teslim edileceği garanti edilir.
- Hız ve yeniden deneme kontrolleri: Görevlerin dağıtılacağı hızı, maksimum deneme sayısını ve denemeler arasındaki minimum bekleme süresini ayarlayarak yürütme işlemini kontrol edin.
- Geleceğe dönük planlama: Bir görevin çalıştırılacağı zamanı kontrol edin.
Bu codelab'de öncelikle HTTP hedef görevleri için normal bir Cloud Tasks kuyruğu oluşturmayı ve kullanmayı öğreneceksiniz. Ardından, Cloud Tasks ile HTTP isteklerini daha kolay arabelleğe almak için sıra düzeyinde HTTP URI geçersiz kılma ve yeni BufferTask API'yi nasıl kullanacağınızı öğreneceksiniz.
Neler öğreneceksiniz?
- HTTP hedef görevleri oluşturma
- Yeni kuyruk düzeyinde HTTP URI geçersiz kılma özelliğiyle HTTP hedefi görevleri oluşturma
- Bekleyen görevleri yeni kuyruk düzeyinde HTTP URI geçersiz kılma ile değiştirme
- Yeni BufferTask API ile HTTP isteklerini daha kolay arabelleğe alma
2. Kurulum ve Gereksinimler
Yönlendirmesiz ortam kurulumu
- Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.



- Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Bu bilgiyi istediğiniz zaman güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğinize (genellikle
PROJECT_IDolarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adım tamamlandıktan sonra değiştirilemez ve proje süresince geçerli kalır. - Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırılmayı önlemek için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
Cloud Shell'i Başlatma
Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir. Ancak bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.
Google Cloud Console'da sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:

Ortamın temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır. İşlem tamamlandığında aşağıdakine benzer bir sonuç görürsünüz:

Bu sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki tüm çalışmalarınızı tarayıcıda yapabilirsiniz. Herhangi bir şey yüklemeniz gerekmez.
3. HTTP hedefi görevleri için düzenli bir sıra oluşturma
Bu ilk adımda, normal bir Cloud Tasks kuyruğu oluşturmayı ve Cloud Run hizmetini hedeflemek için bu kuyruğa HTTP görevleri eklemeyi öğreneceksiniz.

HTTP hedefi görevleri nedir?
HTTP hedef görevleri, sektör standardı OAuth/OIDC kimlik doğrulamasını kullanarak Compute Engine, Google Kubernetes Engine, Cloud Run, Cloud Functions veya şirket içi sistemlerde çalışan dilediğiniz HTTP hizmetini güvenli bir biçimde hedefleyebilir.
Cloud Run hizmeti dağıtma
Öncelikle, gerekli API'lerin etkinleştirildiğinden emin olun:
gcloud services enable \ cloudtasks.googleapis.com \ run.googleapis.com
HTTP görevlerinin hedefi olarak hizmet verecek bir Cloud Run hizmeti dağıtın:
SERVICE1=hello1 REGION=us-central1 gcloud run deploy $SERVICE1 \ --allow-unauthenticated \ --image=gcr.io/cloudrun/hello \ --region=$REGION
Cloud Tasks sırası oluşturma
Normal bir Cloud Tasks sırası oluşturun:
QUEUE1=http-queue LOCATION=us-central1 gcloud tasks queues create $QUEUE1 --location=$LOCATION
HTTP görevleri oluşturulurken bunları gözlemleyebilmek için sırayı geçici olarak duraklatın:
gcloud tasks queues pause $QUEUE1 --location=$LOCATION
4. HTTP görevi oluşturma ve test etme
Bu adımda, daha önce oluşturduğunuz kuyruğu hedefleyen bir HTTP görevi oluşturacaksınız.
HTTP görevi oluşturma
gcloud kullanarak HTTP görevleri oluşturabilirsiniz:
gcloud tasks create-http-task \
--queue=$QUEUE1 \
--location=$LOCATION \
--url=$SERVICE1_URL \
--method=GET
İsteğe bağlı: İstemci kitaplıklarıyla bir HTTP görevi de oluşturabilirsiniz. Örneğin, bir HTTP isteğinin CloudTasksClient ile Cloud Tasks'e gönderilmeden önce Task ve TaskRequest içine sarmalandığı bir C# örneği için Program.cs bölümüne göz atabilirsiniz:
var taskRequest = new CreateTaskRequest
{
Parent = new QueueName(projectId, location, queue).ToString(),
Task = new Task
{
HttpRequest = new HttpRequest
{
HttpMethod = HttpMethod.Get,
Url = url
}
}
};
var client = CloudTasksClient.Create();
var response = client.CreateTask(taskRequest);
Görevi oluşturup sıraya eklemek için aşağıdaki şekilde çalıştırabilirsiniz:
dotnet run $PROJECT_ID $LOCATION $QUEUE1 $SERVICE1_URL
HTTP görevini test etme
Bu noktada, görev oluşturulur ancak kuyruk duraklatıldığı için henüz yürütülmez. Kuyrukları listeleyerek bunu doğrulayabilirsiniz:
gcloud tasks queues list --location=$LOCATION
Kuyruğu PAUSED durumunda görmeniz gerekir:
QUEUE_NAME STATE http-queue PAUSED
Sırayı devam ettirme:
gcloud tasks queues resume $QUEUE --location=$LOCATION
Cloud Run hizmetinin günlüklerini kontrol edin:
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE1" --limit 1
Cloud Run hizmetinin Cloud Tasks'ten bir HTTP GET isteği aldığını görmelisiniz:
httpRequest: latency: 0.227597158s protocol: HTTP/1.1 remoteIp: 35.243.23.192 requestMethod: GET requestSize: '415' requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/ responseSize: '5510' serverIp: 216.239.32.53 status: 200 userAgent: Google-Cloud-Tasks
5. Yönlendirme yapılandırması olan bir sıra oluşturma
Bu adımda, Queue-level Task Routing Configuration özelliğini kullanarak HTTP URI geçersiz kılma eklemek için yönlendirme yapılandırması olan bir Cloud Tasks sırası oluşturmayı öğreneceksiniz. Ardından, ilk Cloud Run hizmetini hedeflemek için bu hizmete HTTP görevleri ekleyeceksiniz. Yönlendirme yapılandırmasının, görevleri ikinci Cloud Run hizmetine yönlendirmek için URI'yi geçersiz kıldığını gözlemleyeceksiniz.

Kuyruk düzeyinde görev yönlendirme yapılandırması nedir?
Kuyruk düzeyinde görev yönlendirme yapılandırması, bekleyen ve yeni tüm görevler için kuyruğun tamamında HTTP görev yönlendirmesini değiştirir. Bu sayede, HTTP hedefinin görev düzeyinde ayarlanması gerekmediğinden görevler daha kolay oluşturulabilir ve kuyruktaki tüm görevlerin hedefi ayarlanabildiğinden (ör. orijinal arka uç kapalıysa trafiği farklı bir arka uca yönlendirme) hizmet sağlayıcıya daha fazla kontrol verilir.
Aşağıdaki yapılandırma, kuyruk düzeyinde ayarlanabilir:
- Üstbilgiler: Kuyruk düzeyinde belirtilen kuyruk düzeyindeki üstbilgiler, kuyruktaki tüm görevler için üstbilgileri ekler veya günceller.
- HTTP Yöntemi: Sıra düzeyinde belirtilen HTTP yöntemi, sıradaki tüm görevlerin HTTP yöntemini geçersiz kılar.
- Hedef URI: Ana makine, yol, sorgu, bağlantı noktası, şema (HTTP veya HTTPS) ayrı ayrı geçersiz kılınabilir.
- Yetkilendirme: Kuyruk düzeyinde belirtilen OIDC/OAuth yapılandırması, görev düzeyindeki OIDC/OAuth yapılandırmasını geçersiz kılar.
İkinci bir Cloud Run hizmeti dağıtma
Daha sonra HTTP URI geçersiz kılma hedefi olarak hizmet verecek ikinci bir Cloud Run hizmeti dağıtın:
SERVICE2=hello2 REGION=us-central1 gcloud run deploy $SERVICE2 \ --allow-unauthenticated \ --image=gcr.io/cloudrun/hello \ --region=$REGION
Hizmet URL'sinin ana makinesini daha sonra kullanmak üzere kaydedin:
SERVICE2_URL=$(gcloud run services describe $SERVICE2 --region $REGION --format 'value(status.url)') SERVICE2_HOST=$(echo $SERVICE2_URL | sed 's,http[s]*://,,g')
Yönlendirme yapılandırması olan bir Cloud Tasks sırası oluşturma
İkinci Cloud Run hizmetine HTTP URI geçersiz kılma ile yönlendirme yapılandırması olan bir kuyruk oluşturun.
QUEUE2=http-queue-uri-override gcloud beta tasks queues create $QUEUE2 \ --http-uri-override=host:$SERVICE2_HOST \ --location=$LOCATION
URI geçersiz kılma işleminin ikinci Cloud Run hizmetiyle ilgili olduğunu unutmayın. Sıraya eklenen tüm HTTP görevlerinin orijinal URI ana makinesi geçersiz kılınır. Kuyruk yapılandırmasını görebilirsiniz:
gcloud beta tasks queues describe $QUEUE2 --location=$LOCATION
httpTarget öğesinin, ikinci hizmetin ana makinesini gösteren bir uriOverride içerdiğini görmeniz gerekir:
httpTarget:
uriOverride:
host: hello2-idcwffc3yq-uc.a.run.app
pathOverride: {}
queryOverride: {}
...
HTTP görevleri oluşturulurken bunları gözlemleyebilmek için sırayı geçici olarak duraklatın:
gcloud tasks queues pause $QUEUE2 --location=$LOCATION
6. Yönlendirme yapılandırmasıyla kuyruk için bir HTTP görevi oluşturma ve test etme
Bu adımda, ilk hizmeti hedefleyen bir HTTP görevi oluşturacak ve URI'sinin, ikinci hizmeti işaret etmek için kuyruk tarafından geçersiz kılındığını gözlemleyeceksiniz.
HTTP görevi oluşturma
İlk hizmetin URL'siyle bir HTTP görevi oluşturun:
gcloud tasks create-http-task \
--queue=$QUEUE2 \
--location=$LOCATION \
--url=$SERVICE1_URL \
--method=GET
HTTP görevini test etme
Sırayı devam ettirme:
gcloud tasks queues resume $QUEUE2 --location=$LOCATION
Geçersiz kılma nedeniyle Cloud Tasks'ten HTTP GET isteğini ilk Cloud Run hizmetinin değil, ikinci Cloud Run hizmetinin aldığını görürsünüz:
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE2" --limit 1
--- httpRequest: latency: 0.228982142s protocol: HTTP/1.1 remoteIp: 35.187.132.84 requestMethod: GET requestSize: '426' requestUrl: https://hello2-idcwffc3yq-uc.a.run.app/ responseSize: '5510' serverIp: 216.239.34.53 status: 200 userAgent: Google-Cloud-Tasks
7. Yönlendirme yapılandırmasıyla beklemedeki görevleri değiştirme
Ayrıca, bir kuyruktaki bekleyen tüm görevlerin HTTP URI'sini değiştirmek için yönlendirme yapılandırmasını da kullanabilirsiniz. Bu seçenek, arka uç hizmeti çöktüğünde ve hızlıca başka bir hizmete yönlendirmek istediğinizde yararlıdır. Bu adımda nasıl çalıştığına bakalım.
Sırayı tekrar duraklatın:
gcloud tasks queues pause $QUEUE2 --location=$LOCATION
Görev URL'si olarak google.com ile bir HTTP görevi oluşturun:
gcloud tasks create-http-task \
--queue=$QUEUE2 \
--location=$LOCATION \
--url=https://www.google.com \
--method=GET
Sıra duraklatıldığından görev bekleme durumunda.
Şimdi, HTTP URI geçersiz kılma işlemini ilk hizmete işaret edecek şekilde güncelleyin. Bu işlem, bekleyen görevin ana makinesini google.com yerine ilk hizmetin ana makinesi olarak değiştirir:
SERVICE1_URL=$(gcloud run services describe $SERVICE1 --region $REGION --format 'value(status.url)') SERVICE1_HOST=$(echo $SERVICE1_URL | sed 's,http[s]*://,,g') gcloud beta tasks queues update $QUEUE2 \ --http-uri-override=host:$SERVICE1_HOST \ --location=$LOCATION
Sırayı devam ettirme:
gcloud tasks queues resume $QUEUE2 --location=$LOCATION
Geçersiz kılma nedeniyle ilk Cloud Run hizmetinin Cloud Tasks'ten bir HTTP GET isteği aldığını görürsünüz (google.com yerine):
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE1" --limit 1 --- httpRequest: latency: 0.228982142s protocol: HTTP/1.1 remoteIp: 35.187.132.84 requestMethod: GET requestSize: '426' requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/ responseSize: '5510' serverIp: 216.239.34.53 status: 200 userAgent: Google-Cloud-Tasks
8. BufferTask API için sıra oluşturma
Normalde, gcloud veya Görevler istemci kitaplıklarından Görevler API'sini kullanarak görevler oluşturursunuz. Bu durum, uygulamaların istemci kitaplıklarını kullanarak HTTP isteklerini Görevler'e sarmalamasına neden olur ve uygulamalar ile Görevler istemci kitaplıkları arasında bağımlılık oluşturur.
Bu adımda, yalnızca bir HTTP isteği göndererek HTTP hedef görevlerini daha kolay oluşturmak için kuyruk düzeyinde HTTP URI geçersiz kılma ve yeni BufferTask API'den nasıl yararlanacağınızı göreceksiniz. HTTP isteği gönderebilen tüm uygulamalar artık HTTP hedef görevleri oluşturabilir.

BufferTask API nedir?
CreateTask API, Görev oluşturmanın eski yöntemidir ve istemcinin, gerekli tüm alanlar ayarlanmış bir Görev nesnesini API'ye göndermesini gerektirir.
BufferTask API, kullanıcıların herhangi bir görev yapılandırması (HTTP URL'si, üstbilgiler, yetkilendirme) sağlamasına gerek kalmadan HTTP görevi oluşturmasına olanak tanıyan yeni bir özelliktir. Bu sayede, Buffer API'ye yalnızca bir mesaj veya isteğinizin gövdesini gönderebilirsiniz.
Bu sayede, istemci tarafında herhangi bir kod değişikliği yapılmasına gerek kalmadan Cloud Tasks hizmetinizin önüne dağıtılabildiğinden hizmetlerle daha kolay entegrasyon sağlanır. BufferTask API'ye gönderilen rastgele HTTP istekleri, Task nesnesi olarak sarmalanır ve kuyruk düzeyinde ayarlanan hedefe teslim edilir.
BufferTask API'yi kullanmak için kuyrukta Hedef URI yapılandırması ayarlanmış olmalıdır. Diğer bir deyişle, Kuyruk Düzeyinde Yönlendirme Yapılandırması özelliği, BufferTask API'nin kullanılabilmesi için ön koşuldur.
Yönlendirme yapılandırmasıyla Cloud Tasks sırası oluşturma
Önceki adımda dağıttığımız ilk hizmete yönlendirme yapılandırması olan bir sıra oluşturun:
SERVICE1=hello1 SERVICE1_URL=$(gcloud run services describe $SERVICE1 --region $REGION --format 'value(status.url)') SERVICE1_HOST=$(echo $SERVICE1_URL | sed 's,http[s]*://,,g') QUEUE3=http-queue-uri-override-buffer gcloud beta tasks queues create $QUEUE3 \ --http-uri-override=host:$SERVICE1_HOST \ --location=$LOCATION
HTTP görevleri oluşturulurken bunları gözlemleyebilmek için sırayı geçici olarak duraklatın:
gcloud tasks queues pause $QUEUE3 --location=$LOCATION
9. BufferTask API ile HTTP isteklerini arabelleğe alma
Bu adımda, BufferTask API ile basit HTTP GET veya POST isteklerini arabelleğe alacaksınız. Cloud Tasks, bu HTTP isteklerini arka planda kuyruğun varsayılan yönlendirme yapılandırma ayarlarıyla HTTP görevlerine sarmalar.
Öncelikle, erişim jetonu almak ve bazı değişkenleri ayarlamak için giriş yapın:
gcloud auth application-default login ACCESS_TOKEN=$(gcloud auth application-default print-access-token) PROJECT_ID=$(gcloud config get-value project) TASKS_QUEUES_API="https://cloudtasks.googleapis.com/v2beta3/projects/$PROJECT_ID/locations/$LOCATION/queues"
HTTP görevi oluşturma
BufferTask API ile bir HTTP görevi oluşturun. Görev oluşturmaya gerek kalmadan basit bir HTTP GET isteği gönderildiğini fark edin:
curl -X GET "$TASKS_QUEUES_API/$QUEUE3/tasks:buffer" \ -H "Authorization: Bearer $ACCESS_TOKEN"
HTTP POST ve gövde içeren başka bir HTTP görevi oluşturun:
curl -X POST "$TASKS_QUEUES_API/$QUEUE3/tasks:buffer" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d "{'message': 'Hello World'}"
İsteğe bağlı: İstemci kitaplıklarıyla bir HTTP görevi de oluşturabilirsiniz. Örneğin, bir Task içine sarmalamanıza veya Cloud Tasks için istemci kitaplığına gerek kalmadan doğrudan BufferTask API'ye bir HTTP GET isteğinin gönderildiği C# örneği için Program.cs'ye göz atabilirsiniz:
var BufferTaskApiUrl = $"https://cloudtasks.googleapis.com/v2beta3/projects/{ProjectId}/locations/{Location}/queues/{Queue}/tasks:buffer";
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {AccessToken}");
var response = await client.GetAsync(BufferTaskApiUrl);
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine($"Response: {content}");
}
Şu şekilde çalıştırabilirsiniz:
dotnet run $PROJECT_ID $LOCATION $QUEUE3 $ACCESS_TOKEN
BufferTask API, HTTP isteklerinden bir Görev oluşturur ve URI için kuyruğun yönlendirme yapılandırma ayarlarındaki URL'yi ekler.
HTTP görevini test etme
Sırayı devam ettirme:
gcloud tasks queues resume $QUEUE3 --location=$LOCATION
Cloud Run hizmetinin Cloud Tasks'ten HTTP GET ve POST istekleri aldığını görmelisiniz:
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE1" --limit 4
--- httpRequest: latency: 0.002279292s protocol: HTTP/1.1 remoteIp: 35.243.23.42 requestMethod: POST requestSize: '777' requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/ responseSize: '5450' serverIp: 216.239.32.53 status: 200 userAgent: Google-Cloud-Tasks ... httpRequest: latency: 0.228982142s protocol: HTTP/1.1 remoteIp: 35.187.132.84 requestMethod: GET requestSize: '426' requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/ responseSize: '5510' serverIp: 216.239.34.53 status: 200 userAgent: Google-Cloud-Tasks
10. Tebrikler
Tebrikler, codelab'i tamamladınız.
Devamında, Cloud Tasks'in bu yeni özelliklerinin hizmetler arasında kolayca bir arabellek sırası oluşturmaya nasıl yardımcı olabileceğine dair gerçek dünyadan bir örnek görmek için Cloud Tasks'i Pub/Sub ile Cloud Run arasında arabellek olarak kullanma başlıklı makaleyi inceleyebilirsiniz.
Temizleme (isteğe bağlı)
Ücretlendirilmemek için kaynakları temizlemeniz önerilir.
Projeye ihtiyacınız yoksa projeyi silebilirsiniz:
gcloud projects delete $PROJECT_ID
Projeye ihtiyacınız varsa kaynakları tek tek silebilirsiniz.
Cloud Run hizmetlerini silin:
gcloud run services delete $SERVICE1 --region $REGION gcloud run services delete $SERVICE2 --region $REGION
Cloud Tasks sıralarını silin:
gcloud tasks queues delete $QUEUE1 --location=$LOCATION gcloud tasks queues delete $QUEUE2 --location=$LOCATION gcloud tasks queues delete $QUEUE3 --location=$LOCATION
İşlediğimiz konular
- HTTP hedef görevleri oluşturma
- Yeni kuyruk düzeyinde HTTP URI geçersiz kılma özelliğiyle HTTP hedefi görevleri oluşturma
- Bekleyen görevleri yeni kuyruk düzeyinde HTTP URI geçersiz kılma ile değiştirme
- Yeni BufferTask API ile HTTP isteklerini daha kolay arabelleğe alma