Kuyruk tetikleyicisi
İleti kuyruğu, işlemler, iş parçacıkları veya uygulamalar arasında mesajlaşmayı işlemek için kullanılan bir yazılım bileşenidir. Kuyruk bir iletiyi depolayabilir ve çalışanlar uygun bir zamanda iletiyi getirebilir.
Bulutta, ileti kuyrukları bir yük ile olaylar oluşturabilir. Azure İşlevleri gibi bir hizmet, böyle bir iletiyi dinleyebilir ve bir ileti yayımlandığında kodunu çalıştırabilir.
İleti kuyruklarıyla çalışma
Azure işlevinin ileti kuyruğundan bir iletiyi kullanabilmesi için bir tetikleyiciye ve büyük olasılıkla bağlamaya ihtiyacı vardır.
Azure işlevinin belirli bir kuyruğu dinlemesi gerekir, böylece kodu bu kuyrukta yeni bir ileti yayımlandığında tetiklenmiş olur. Tetikleyiciyi ayarlamak için, tetikleyici kodunun ileti kuyruğuna nasıl bağlanacaklarını bilmesi için uygun kimlik bilgilerini sağlamanız gerekir. Kuyruğu dinleyen işlev için function.json dosyasında bir girdi oluşturursunuz. öğesinde bindings , bir girişte şu özellikleri belirtin:
| Özellik | Değer |
|---|---|
name |
Kodda başvurabileceğiniz bir ad |
type |
queueTrigger |
direction |
in |
queueName |
Kuyruğun adı |
connection |
local.settings.json'da bir yapılandırma değişkeni |
Örnek bir giriş şu şekilde tanımlanabilir:
{
"name": "myQueueItem",
"type": "queueTrigger",
"direction": "in",
"queueName": "messages-incoming",
"connection": "AzureWebJobsStorage"
}
Bu kuyruk bir depolama hesabında yer alırsa, AzureWebJobsStorage değer bağlantı dizesi değeridir.
Kuyruktan ileti kullanırken bağlamaya kesinlikle ihtiyacınız yoktur. Ancak, kuyruğa yazmak istiyorsanız bir çıkış bağlaması gerekir. Böyle bir bağlama ile istenen kuyruğa başvuru alırsınız.
Not
Şu anda kuyruklar için yalnızca çıkış bağlamaları desteklenmektedir.
Yerel olarak geliştirme
Geliştirici olarak kısa geri bildirim döngüleri istiyorsunuz. Ayrıca geliştirici deneyiminizin bir üretim ortamına mümkün olduğunca yakın olduğundan da emin olmak istiyorsunuz. Bu hedeflerin her ikisini de elde etmenin bir yolu, kuyruk öykünücüsü kullanmaktır.
Kuyruk öykünücüsü, Azure işlevinizin yanıt vereceği gerçek kuyruk iletilerinin benzetimini yapmanızı sağlar. Öykünücüyü kullanmak için:
Öykünücüyü yükleyin. Visual Studio Code'da Azurite'yi arayın veya Azurite uzantısını indirin.
Emülatör işlevselliğini kullanmak için, komut paletinde Azure: Kuyruk Hizmetini Başlat öğesini seçin.
Bu komutun çalıştırılması, başka bir uygulamanın Azure Depolama Gezgini adlı bir dinleyici başlatır. Depolama Gezgini, bulut kaynaklarınıza göz atmanızı ve öykünücü işlevselliğini kullanmanızı sağlayan bir istemci uygulamasıdır.
Azure Depolama Gezgini'ni indirin. Ardından uygulamayı açtığınızda öykünücünün çalıştığını gösteren aşağıdaki göstergeyi görürsünüz:
Öykünücüde bir kuyruk oluşturun. İşlev uç noktasını yapılandırmanın bir parçası olarak bu kuyruğu kullanacaksınız. Kuyruk öğesine sağ tıklayarak yeni bir kuyruk oluşturabilirsiniz.
İşlevler uygulamanızın öykünücüyü kullandığından emin olmak için bağlantı dizesi doğru şekilde ayarlamanız gerekir. local.settings.jsonaçın, öğesini bulun
AzureWebJobsStorageve değerini"UseDevelopmentStorage=true"verin.Not
Buluta taşınırken bu özelliği farklı ayarlamayı unutmayın. Üretim sırasında Azure'daki gerçek bir kaynağa işaret etmelidir.
İşlevi oluşturma
Artık ayarlanmış bir yerel öykünücüye sahipsiniz ve bu öykünücüde bir kuyruk var. Ayrıca projenizi yerel öykünücüye işaret eden şekilde yapılandırmışsınız. Şimdi kuyruk tetikleyicisini işlemek için bir işlev oluşturmanız gerekir.
İşlev uç noktası oluşturma
Gelen kuyruk iletilerini işleyebilen bir işlev oluşturmaya hazırsınız. İşleviniz için bir klasör oluşturun ve örneğin, queueTriggerolarak adlandırınız. Ardından birfunction.json dosyası oluşturun ve aşağıdaki içeriği verin:
{
"bindings": [{
"name" "queueItem",
"type": "queueTrigger",
"direction": "in",
"queueName" : "items",
"connection": "AzureWebJobsStorage"
}]
}
Öğesinin name değeri önemlidir, çünkü daha sonra kodunuzda kuyruktan gelen verileri ayrıştırmak için bu öğeye başvuracaksınız. Kuyruğun queueTrigger yeni bir ileti olduğunda tetiklemesi için türünde olması gerekir.
queueName öğesi, etkileşimde bulunduğun kuyruğu benzersiz olarak tanımlar. Buraya girdiğiniz her şey öykünücüdeki kuyruğu çağırdığınız veya daha sonra Azure'daki gerçek kuyruğunuzu adlandırdığınız kuyrukla eşleşmelidir.
connection öğesi, AzureWebJobsStorage içindeki öğesinin değerini gösterir.
Kuyruk iletisini işleme
Gelen kuyruk iletisini işlemek için, ihtiyacınız olan iletiyi ayrıştırabilecek kod yazmanız gerekir. Bu noktada, bundan sonra ne yapacağınıza karar vekleyebilirsiniz. Örneğin, bir web isteği başlatabilir, bu iletiyi başka bir kuyruğa koyabilir veya iletiyi bir veritabanına gönderebilirsiniz.
Yol ayarlama
Gelen istekleri işlemek için bir yol gerekir. Azure İşlevleri, kökte bir kuyruğa yönelik istekleri işler. Bir yolu aşağıdaki gibi ayarladığınızda, isteğiniz olarak http://localhost:<port>/queueTriggerçağrılır:
http.HandleFunc("/queueTrigger", handleQueueTrigger)
İsteğin kodunu çözme
Kuyruk iletisi size gönderildiğinde şu şekilde olur:
{
"Data": {
"queueItem": "your message"
},
"Metadata": {
"DequeueCount": 1,
"ExpirationTime": "2019-10-16T17:58:31+00:00",
"Id": "800ae4b3-bdd2-4c08-badd-f08e5a34b865",
"InsertionTime": "2019-10-09T17:58:31+00:00",
"NextVisibleTime": "2019-10-09T18:08:32+00:00",
"PopReceipt": "AgAAAAMAAAAAAAAAAgtnj8x+1QE=",
"sys": {
"MethodName": "QueueTrigger",
"UtcNow": "2019-10-09T17:58:32.2205399Z",
"RandGuid": "24ad4c06-24ad-4e5b-8294-3da9714877e9"
}
}
}
Bu gelen isteğin kodunu çözmenin bir parçası olarak, önceki iletiyi modelleyen bir yardımcı yapıya ihtiyacınız vardır. Şu şekilde görünmelidir:
type InvokeRequest {
Data map[string]json.RawMessage
Metadata map[string]interface{}
}
Gelen isteği almak ve kodunu çözmek için kod yazmaya başlayın:
func handleQueueTrigger(w http.ResponseWrite, r *http.Request) {
var invokeRequest InvokeRequest
d := json.NewDecoder(r.Body)
d.Decode(&invokeRequest)
}
Artık isteğin kodunun çözüldüğü bir noktadasınız, ancak kuyruk iletisini ayrıştırmanız gerekiyor.
Kuyruk iletisini ayrıştırma
İsteğin kodu çözüldükten sonra, kuyruk iletiniz özelliğindeki Data istekten alınabilir. Ayrıca, name dosyasında ayarladığınız özellik değerine göre iletiye başvurmanız gerekir. İletiyi alma kodu aşağıdaki gibi tek satırlı bir koddur:
invokeRequest.Data["queueItem"]
Bu iletiyi düz metinde okuyabilmeniz gerektiğinden, bir JSON kitaplığı kullanıp ayrıştıracaksınız. JSON kitaplığı iki parametre alan bir Unmarshal() yöntem kullanır: ayrıştırılacak ileti ve ayrıştırılan iletiyi yerleştirmek için değişken. Bu nedenle kodunuzun şu şekilde görünmesi gerekir:
var parsedMessage string
json.Unmarshal(invokeRequest.Data["queueItem"], &parsedMessage)
Bu noktada iletinizi parsedMessage içerir. Konsola yazdırmak istiyorsanız aşağıdaki kodu kullanın:
fmt.Println(parsedMessage) // your message
Not
İletiniz bir dizeden daha gelişmiş bir şeyse, parsedMessage işaret edenin şekliyle queueMessage eşleşen bir yapıya sahip olması gerekir.
İleti tetikleme
Uygulamanızı test etmek için Azure Depolama Gezgini kullanabilirsiniz. Aracın sağ bölmesinde İleti Ekle düğmesini seçerek kuyrukta bir ileti oluşturun.
İşlevler uygulamanız varsa ve bu noktada çalışıyorsa bağlamayı tetikler ve kodunuz çağrılır.