연습 - 큐 메시지 처리
이 연습에서는 메시지 큐의 메시지에서 트리거할 수 있는 경로로 애플리케이션을 확장합니다.
참고
이 연습을 시작하려면 먼저 Azurite 확장을 다운로드하고, Azure Storage Explorer를 다운로드하고, Azure Functions Core Tools를 다운로드해야 합니다.
앱 스캐폴드
이 연습에서는 새 Azure Functions 앱을 시작합니다. 새 디렉터리를 만들고 디렉터리에 직접 배치합니다.
뷰>명령 팔레트를 선택합니다.
Azure Functions: Create New Project를 입력합니다.
폴더를 선택합니다. 일반적으로 현재 폴더입니다.
언어 선택에서 사용자 지정 처리기를 선택합니다.
첫 번째 함수의 템플릿 선택에서 HttpTrigger를 선택합니다.
앱에 queueTrigger와 같은 이름을 지정합니다.
익명의 권한 부여 수준을 선택합니다. 필요한 경우 나중에 이름을 변경할 수 있습니다.
루트에서 server.go라는 파일을 만듭니다. 이제 프로젝트에 다음 파일이 있어야 합니다.
queueTrigger/ function.json .funcignore .gitignore host.json local.settings.json proxies.json server.go
queueTrigger
디렉터리에 있는 function.json 파일로 이동합니다.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" "io/ioutil" "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
값을 사용합니다.프로젝트 루트에서
go build
를 실행하여 server.go 파일을 빌드합니다.go build server.go
환경 구성
다음 단계는 피어링을 구성하는 것입니다. 로컬에서 개발 중이므로 에뮬레이트된 메시지 큐와 연결할 수 있도록 설정해야 합니다.
local.settings.js 파일에서
AzureWebJobsStorage
라는Values
에서 요소를 찾습니다(또는 없으면 추가합니다).UseDevelopmentStorage=true
값을 부여합니다. JSON 항목이 다음과 같아야 합니다."AzureWebJobsStorage" : "UseDevelopmentStorage=true"
명령 팔레트(보기>명령 팔레트)를 열고 Azurite: 큐 서비스 시작을 선택하여 Azurite 확장을 시작합니다.
참고
이 단계에서 프로젝트에 몇 개의 로컬 파일을 만듭니다.
Azure Storage Explorer를 엽니다. 왼쪽에 에뮬레이터의 내용이 표시됩니다.
큐 노드를 마우스 오른쪽 단추로 클릭하고 새 큐를 만드는 옵션을 선택합니다. 이름을 items로 지정합니다.
참고
큐의 이름을 원하는 대로 지정할 수 있습니다. 그러나 function.json 파일을 구성해야 합니다. 여기에서 큐의 이름을 무엇으로 지정하든 function.json으로 이동해야 합니다.
queueTrigger
디렉터리 밑에서 function.json을 찾습니다.bindings
배열에 다음 항목이 있는지 확인합니다.{ "name": "queueItem", "type": "queueTrigger", "direction": "in", "queueName" : "items", "connection": "AzureWebJobsStorage" }
queueName
속성의 이름은 Azure Storage Explorer에서 만든 큐와 같습니다.connection
속성은 local.settings.json에서 설정한 값을 가리킵니다.name
속성의 값은queueItem
입니다. Go 코드는 이 값으로 큐 메시지 구문을 분석합니다.
앱 실행
이제 모든 것이 설정되었습니다. 앱을 실행하고, Azure Storage Explorer 시작하고, 큐 메시지를 만들기만 하면 됩니다. 코드에서 해당 메시지를 사용할 수 있어야 합니다.
터미널의 프로젝트 루트에서
func start
명령을 실행합니다.func start
Visual Studio Code에서 명령 팔레트를 열고 Azurite: 큐 서비스 시작을 실행합니다.
아직 시작되지 않은 경우에는 Azure Storage Explorer를 시작합니다.
Azure Storage Explorer에서 메시지 추가를 선택합니다.
표시되는 대화 상자에서 메시지를 입력하고 확인을 선택합니다. 이제 생성한 메시지의 세부 정보가 표시됩니다.
Visual Studio Code에서 함수가 실행되고 있어야 합니다. 이제 터미널에 마지막 행으로 출력된 메시지가 표시되어야 합니다.
함수가 큐 메시지를 사용하고 해당 콘텐츠를 작성할 수 있었습니다.
축하합니다! 큐 메시지에서 트리거할 수 있는 Azure 함수를 Go에서 빌드했습니다. 해당 메시지 구문도 분석했습니다.
들어오는 메시지로 수행하는 일은 사용자의 몫입니다. 예를 들어, 데이터베이스에 저장하거나 웹 요청에 페이로드로 보낼 수 있습니다.