แบบฝึกหัด - จัดการข้อความคิว
ในแบบฝึกหัดนี้ คุณจะขยายแอปพลิเคชันของคุณด้วยเส้นทางที่สามารถทริกเกอร์บนข้อความในคิวข้อความ
โน้ต
ก่อนที่คุณจะเริ่มแบบฝึกหัดนี้ตรวจสอบให้แน่ใจว่าคุณได้ดาวน์โหลดส่วนขยาย Azurite ดาวน์โหลด Azure Storage Explorerและ ดาวน์โหลดเครื่องมือ Azure Functions Core
ยกระดับแอป
สําหรับแบบฝึกหัดนี้ เราจะเริ่มต้นบนแอป Azure Functions ใหม่ สร้างไดเรกทอรีใหม่และใส่ตัวเองในนั้น
เลือก >Command Palette
เลือก ฟังก์ชัน Azure: สร้างโครงการใหม่
เลือกโฟลเดอร์ โดยปกติแล้วจะเป็นโฟลเดอร์ปัจจุบันของคุณ
ใน เลือกภาษาเลือก ตัวจัดการแบบกําหนดเอง
ใน เลือกเทมเพลตสําหรับฟังก์ชันแรกของคุณ เลือก HttpTrigger
ตั้งชื่อให้แอป เช่น queueTrigger
เลือกระดับการตรวจสอบ แบบไม่ระบุชื่อ คุณสามารถเปลี่ยนได้ในภายหลังถ้าคุณต้องการ
ที่ราก ให้สร้างไฟล์ที่ชื่อ server.go โครงการของคุณควรมีไฟล์ต่อไปนี้:
queueTrigger/ function.json .funcignore .gitignore host.json local.settings.json proxies.json server.goไปที่ไฟล์ function.json ในไดเรกทอรี
queueTriggerค้นหารายการการผูกแรกในองค์ประกอบtype:{ "authLevel": "anonymous", "type": "httpTrigger", "direction": "in", "name": "req", "methods": [ "get", "post" ] }เปลี่ยนรายการการผูกกับการกําหนดค่านี้:
{ "name": "queueItem", "type": "queueTrigger", "direction": "in", "queueName" : "items", "connection": "AzureWebJobsStorage" }ในขั้นตอนนี้ คุณตั้งค่าคุณสมบัติ
nameคุณจะได้อ้างอิงส่วนนี้ในโค้ดในภายหลัง คุณยังเปลี่ยนชนิดทริกเกอร์เป็นqueueTriggerซึ่งทําให้สามารถฟังข้อความคิวได้ค่า
queueNameชี้ไปยังคิวที่ระบุ เมื่อคุณเรียกใช้อีมูเลเตอร์ในภายหลัง คุณจะสร้างคิวด้วยชื่อดังกล่าวสุดท้าย คุณได้ชี้ตัวแปรใน local.settings.json ที่จะประกอบด้วยสตริงการเชื่อมต่อไปยังคิว
สร้างแอป
ในตอนนี้คุณมีโครงกระดูกของแอป ตอนนี้คุณพร้อมที่จะเพิ่มโค้ดที่สามารถจัดการข้อความคิวขาเข้าได้แล้ว
เปิดไฟล์ server.go และเพิ่มโค้ดต่อไปนี้:
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)) }ขณะนี้คุณมีการตั้งค่าเส้นทางที่
/queueTriggerแล้วค้นหาส่วนการนําเข้าและเพิ่มโครงสร้างต่อไปนี้ที่ด้านล่าง:
type InvokeRequest struct { Data map[string]json.RawMessage Metadata map[string]interface{} }ค้นหาวิธีการ
queueHandler()และเพิ่มการอัปเดตด้วยวิธีต่อไปนี้: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) }โค้ดแรกอ่านเนื้อความจากสตรีมคําตอบขาเข้าและถอดรหัส:
var invokeRequest InvokeRequest d := json.NewDecoder(r.Body) d.Decode(&invokeRequest)จากนั้น ตัวข้อความเองจะถูกขุดด้วยการเรียกไปยัง
Unmarshal():var parsedMessage string json.Unmarshal(invokeRequest.Data["queueItem"], &parsedMessage)ตอนนี้คุณมีข้อความแล้ว ลองพิมพ์ออกมาดู
เพิ่มโค้ดต่อไปนี้:
fmt.Println(parsedMessage) // your messageตอนนี้รหัสของคุณได้รับการเขียนแล้ว ทั้งหมด แต่คุณต้องกําหนดค่าโครงการของคุณเพื่อให้คุณสามารถทดสอบได้
ในไฟล์ host.json ให้ค้นหาองค์ประกอบ
defaultExecutablePathและกําหนดค่าของ./serverโน้ต
สําหรับ Windows คุณจะใช้ค่า ของ
.\\server.exeสร้างไฟล์ server.go โดยการเรียกใช้
go buildที่รากของโครงการ:go build server.go
กําหนดค่าสภาพแวดล้อม
ขั้นตอนถัดไปคือการกําหนดค่าสภาพแวดล้อมของคุณ เนื่องจากคุณกําลังพัฒนาภายในเครื่อง คุณจําเป็นต้องตั้งค่าเพื่อให้คุณสามารถพูดคุยกับคิวข้อความที่ฝังอยู่ได้
ในไฟล์ local.settings.json ให้ค้นหาองค์ประกอบใน
Valuesที่เรียกว่าAzureWebJobsStorage(หรือเพิ่มหากหายไป) ให้ค่าUseDevelopmentStorage=trueรายการ JSON ของคุณควรมีลักษณะดังนี้:"AzureWebJobsStorage" : "UseDevelopmentStorage=true"เริ่มส่วนขยาย Azurite โดยการเปิด Command Palette (View>Command Palette) แล้วเลือก Azurite: Start Queue Service
โน้ต
ขั้นตอนนี้จะสร้างไฟล์ภายในเครื่องบางไฟล์ในโครงการของคุณ
เปิด Azure Storage Explorer ทางด้านซ้าย สามารถมองเห็นเนื้อหาของตัวจําลองได้
คลิกขวาที่โหนด คิว และเลือกตัวเลือกเพื่อสร้างคิวใหม่ ตั้งชื่อ รายการ
โน้ต
คุณสามารถตั้งชื่อคิวว่าอะไรที่คุณต้องการ อย่างไรก็ตาม คุณกําลังจะกําหนดค่าไฟล์ function.json ของคุณ ไม่ว่าคุณจะตั้งชื่อคิวที่นี่อย่างไร ก็ให้เข้าไปใน function.json
ค้นหา function.json ภายใต้ไดเรกทอรี
queueTriggerตรวจสอบให้แน่ใจว่าอาร์เรย์bindingsมีรายการต่อไปนี้:{ "name": "queueItem", "type": "queueTrigger", "direction": "in", "queueName" : "items", "connection": "AzureWebJobsStorage" }คุณสมบัติ
queueNameมีชื่อเดียวกันกับคิวที่คุณสร้างขึ้นใน Azure Storage Explorer คุณสมบัติconnectionจะชี้ไปยังค่าที่คุณตั้งค่าใน local.settings.jsonคุณสมบัติ
nameมีค่าqueueItemรหัสไปของคุณใช้ค่านี้เพื่อแยกวิเคราะห์ข้อความคิว
เรียกใช้แอป
ณ จุดนี้ทุกอย่างถูกตั้งค่าไว้แล้ว สิ่งที่คุณต้องทําคือเรียกใช้แอป เริ่ม Azure Storage Explorer และสร้างข้อความคิว โค้ดของคุณควรสามารถใช้ข้อความนั้นได้
จากเทอร์มินัล ให้เรียกใช้คําสั่ง
func startในรากของโครงการ:func startใน Visual Studio Code ให้เปิด Command Palette และเรียกใช้ Azurite: Start Queue Service
เริ่ม Azure Storage Explorer ถ้ายังไม่ได้เริ่ม
ใน Azure Storage Explorer ให้เลือก เพิ่มข้อความ:
ในกล่องโต้ตอบที่ปรากฏขึ้น ใส่ ข้อความ และเลือก ตกลง ในตอนนี้ คุณสามารถดูรายละเอียดของข้อความที่คุณสร้างขึ้นได้แล้ว
ใน Visual Studio Code ฟังก์ชันของคุณควรทํางานแล้วในขณะนี้ ในเทอร์มินัล คุณควรเห็นข้อความ พิมพ์เป็นแถวสุดท้าย
ฟังก์ชันของคุณจะสามารถใช้ข้อความคิวและเขียนเนื้อหาได้
ยินดีด้วย! คุณสร้างฟังก์ชัน Azure ในไปซึ่งสามารถทริกเกอร์บนข้อความคิวได้ คุณยังแยกวิเคราะห์ข้อความนั้นด้วย
สิ่งที่คุณทํากับข้อความขาเข้าขึ้นอยู่กับคุณ ตัวอย่างเช่น คุณสามารถจัดเก็บไว้ในฐานข้อมูล หรืออาจส่งเป็นส่วนข้อมูลในการร้องขอของเว็บ