Alıştırma - Kuyruk iletisini işleme
Bu alıştırmada, uygulamanızı ileti kuyruğundaki bir iletide tetiklenebilen bir yol ile genişleteceksiniz.
Not
Bu alıştırmaya başlamadan önce Azurite uzantısını indirdiğinizden, Azure Depolama Gezgini'ni indirdiğinizden ve Azure İşlevleri Temel Araçları'nı indirdiğinizden emin olun.
Uygulamayı iskeleye ekle
Bu alıştırma için yeni bir Azure İşlevleri uygulamasıyla başlayacağız. Yeni bir dizin oluşturun ve kendinizi dizinine yerleştirin.
Komut Paleti Görüntüle'yi> seçin.
Azure İşlevleri: Yeni Proje Oluştur seçin.
Genellikle geçerli klasörünüz olan bir klasör seçin.
Dil seçin bölümünde Özel İşleyici'yi seçin.
İlk işleviniz için şablon seçin bölümünde HttpTrigger'ı seçin.
Uygulamaya queueTrigger gibi bir ad verin.
Anonim yetkilendirme düzeyini seçin. İsterseniz bunu daha sonra değiştirebilirsiniz.
Kökte server.go adlı bir dosya oluşturun. Projenizde artık aşağıdaki dosyalar olmalıdır:
queueTrigger/ function.json .funcignore .gitignore host.json local.settings.json proxies.json server.goDizinindeki function.json dosyasına
queueTriggergidin. öğesindeki ilk bağlama girdisinitypebulun:{ "authLevel": "anonymous", "type": "httpTrigger", "direction": "in", "name": "req", "methods": [ "get", "post" ] }Bu bağlama girdisini şu yapılandırmayla değiştirin:
{ "name": "queueItem", "type": "queueTrigger", "direction": "in", "queueName" : "items", "connection": "AzureWebJobsStorage" }Bu adımda özelliğini ayarlarsınız
name. Daha sonra kodda buna başvuracaksınız. Ayrıca tetikleyici türünüqueueTriggerolarak değiştirerek kuyruk iletilerini dinlemeyi mümkün hale getirebilirsiniz.queueNameDeğer belirli bir kuyruğu gösterir. Öykünücüyü daha sonra çalıştırdığınızda, böyle bir ada sahip bir kuyruk oluşturacaksınız.Son olarak, local.settings.json'da kuyruğa bağlantı dizesi içerecek bir değişkene işaret ettiniz.
Uygulamayı oluşturma
Bu noktada bir uygulama iskeleti elde etmiş olacaksınız. Artık gelen kuyruk iletilerini işleyebilen kod eklemeye hazırsınız.
server.go dosyasını açın ve aşağıdaki kodu ekleyin:
package main import ( "encoding/json" "fmt" "log" "net/http" "os" ) func queueHandler(w http.ResponseWriter, r *http.Request) { } func main() { customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT") if !exists { customHandlerPort = "8080" } mux := http.NewServeMux() mux.HandleFunc("/queueTrigger", queueHandler) fmt.Println("Go server Listening on: ", customHandlerPort) log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux)) }Artık konumunda ayarlanmış bir yolunuz
/queueTriggervar.İçeri aktarma bölümünü bulun ve altına aşağıdaki yapıları ekleyin:
type InvokeRequest struct { Data map[string]json.RawMessage Metadata map[string]interface{} }queueHandler()yöntemini bulun ve aşağıdaki şekilde güncelleştirin:func queueHandler(w http.ResponseWriter, r *http.Request) { var invokeRequest InvokeRequest d := json.NewDecoder(r.Body) d.Decode(&invokeRequest) var parsedMessage string json.Unmarshal(invokeRequest.Data["queueItem"], &parsedMessage) }Kod ilk olarak gelen yanıt akışından gövdeyi okur ve kodunu çözer:
var invokeRequest InvokeRequest d := json.NewDecoder(r.Body) d.Decode(&invokeRequest)Ardından iletinin kendisi çağrısıyla
Unmarshal()çıkarılır:var parsedMessage string json.Unmarshal(invokeRequest.Data["queueItem"], &parsedMessage)Artık iletiyi edindiğinize göre, bunu yazdıralım.
Şu kodu ekleyin:
fmt.Println(parsedMessage) // your messageKodunuzun tamamı artık yazılmıştır, ancak test edebilmeniz için projenizi yapılandırmanız gerekir.
host.json dosyasında öğesini bulun
defaultExecutablePathve değerini verin./server.Not
Windows için değerini
.\\server.exekullanırsınız.Proje kökünde dosyasını oluşturun:
go build server.go
Ortamı yapılandırma
Sonraki adım ortamınızı yapılandırmaktır. Yerel olarak geliştirme yaptığınız için, öykünmüş bir ileti kuyruğuyla konuşabilmek için bunu ayarlamanız gerekir.
local.settings.json dosyasında, adı
Valuesolan bir öğe bulun (veya eksikse ekleyin). değeriniUseDevelopmentStorage=trueverin. JSON girdiniz şu şekilde görünmelidir:"AzureWebJobsStorage" : "UseDevelopmentStorage=true"Komut paletini açarak (Komut Paletini>) ve ardından Azurite: Kuyruk Hizmetini Başlat'ı seçerek Azurite uzantısını başlatın.
Not
Bu adım projenizde bazı yerel dosyalar oluşturur.
Azure Depolama Gezgini'i açın. Sol tarafta öykünücünün içeriği görünür.
Kuyruklar düğümüne sağ tıklayın ve yeni bir kuyruk oluşturma seçeneğini belirleyin. Ona items adını verin.
Not
Kuyruğa istediğiniz adı vekleyebilirsiniz. Ancak ,function.json dosyanızı yapılandırmak üzeresiniz. Kuyruğun adı ne olursa olsun, buradaki ad function.json'e eklenmelidir.
dizinin altındaki function.json
queueTrigger. Dizinin aşağıdaki girdiye sahip olduğundanbindingsemin olun:{ "name": "queueItem", "type": "queueTrigger", "direction": "in", "queueName" : "items", "connection": "AzureWebJobsStorage" }özelliği,
queueNameAzure Depolama Gezgini'de oluşturduğunuz kuyrukla aynı ada sahiptir. özelliği,connectionlocal.settings.json'de ayarladığınız değere işaret eder.nameözelliği değerinequeueItemsahiptir. Go kodunuz kuyruk iletisini ayrıştırmak için bu değeri kullanır.
Uygulamayı çalıştırma
Bu noktada her şey ayarlanır. Tek yapmanız gereken uygulamayı çalıştırmak, Azure Depolama Gezgini başlatmak ve bir kuyruk iletisi oluşturmaktır. Kodunuz bu iletiyi kullanabilmelidir.
Terminalden komutunu proje kökünde çalıştırın
func start:func startVisual Studio Code'da komut paletini açın ve Azurite: Kuyruk Hizmetini Başlat'ı çalıştırın.
Henüz başlatılmadıysa Azure Depolama Gezgini başlatın.
Azure Depolama Gezgini'nde İleti Ekle'yi seçin:
Görüntülenen iletişim kutusuna ileti girin ve Tamam'ı seçin. Artık oluşturduğunuz iletinin ayrıntılarını görürsünüz.
Visual Studio Code'da işlevinizin artık çalışıyor olması gerekir. Terminalde, son satır olarak yazdırılan iletiyi görmeniz gerekir.
İşleviniz kuyruk iletisini kullanabildi ve içeriğini yazdı.
Tebrikler! Go'da bir kuyruk iletisinde tetikleyebilen bir Azure işlevi oluşturacaksınız. Ayrıca bu iletiyi ayrıştırmışsınız.
Gelen bir iletiyle ne yaptığınız size bağlı. Örneğin, bir veritabanında depolayabilir veya bir web isteğinde yük olarak gönderebilirsiniz.