google.golang.org/appengine/delay 패키지(v1.6.8)

패키지 지연은 taskqueue API를 사용하여 사용자 요청 범위 밖에서 코드를 실행할 수 있는 방법을 제공합니다.

나중에 실행될 수 있는 함수를 선언하려면 최상위 할당 컨텍스트에서 Func를 호출하고 여기에 임의 문자열 키와 첫 번째 인수가 context.Context인 함수를 전달합니다. 키는 나중에 호출할 수 있도록 함수를 조회하는 데 사용됩니다.

var laterFunc = delay.Func("key", myFunc)

함수 리터럴을 사용할 수도 있습니다.

var laterFunc = delay.Func("key", func(c context.Context, x string) {
    // ...
})

함수를 호출하려면 Call 메서드를 호출합니다.

laterFunc.Call(c, "something")

함수는 횟수에 관계없이 호출할 수 있습니다. 함수에 반환 인수가 있고 마지막 인수의 유형이 오류인 경우 함수는 함수를 재시도해야 함을 알리기 위해 nil이 아닌 오류를 반환할 수 있습니다.

함수의 인수 유형은 gob 패키지에서 인코딩이 가능하면 어떠한 유형이라도 됩니다. 인수가 인터페이스 유형인 경우 해당 인수에 어떠한 구체적인 유형이 전달되든 gob 패키지에 등록하는 것은 클라이언트의 책임입니다. 자세한 내용은 http://golang.org/pkg/gob/#Register를 참조하세요.

함수 초기화 또는 실행 중 발생하는 오류는 애플리케이션 로그에 기록됩니다. 초기화 중 발생한 오류 로그는 Call 메서드를 호출한 요청과 연결됩니다.

아직 성공적으로 실행되지 않은 함수 호출의 상태는 함수가 선언된 파일의 이름과 Func 함수로 전달된 문자열 키의 조합에 의해 보존됩니다. 대기 중인 함수 호출로 앱을 업데이트하는 것은 관련 함수에 (파일 이름, 키) 조합이 보존되는 한 안전합니다. 파일 이름은 다음 규칙에 따라 파싱됩니다.

  • main 패키지의 경로는 파일 이름(github.com/foo/foo.go -> foo.go)으로 단축됩니다.
  • 경로는 패키지 경로(/go/src/github.com/foo/bar.go -> github.com/foo/bar.go)로 삭제합니다.
  • 모듈 버전은 삭제됩니다(/go/pkg/mod/github.com/foo/bar@v0.0.0-20181026220418-f595d03440dc/baz.go -> github.com/foo/bar/baz.go).

대규모 변경사항이 포함된 업데이트 중에는 대기 중인 함수 호출이 손실될 수 있는 위험이 있습니다. 예를 들어 GOPATH 사용에서 go.mod로 전환하면 의도치 않게 파일 경로가 변경될 수 있습니다.

delay 패키지는 Task Queue API를 사용하여 예약된 애플리케이션 경로 "/_ah/queue/go/delay"를 호출하는 작업을 만듭니다. 이 경로는 app.yaml에서 'login: required'로 표시되면 안 되며 'login: admin'으로 표시되거나 액세스 제한이 없어야 합니다.

함수

func RequestHeaders

func RequestHeaders(c context.Context) (*taskqueue.RequestHeaders, error)

RequestHeaders는 현재 태스크 큐 핸들러의 특수 태스크 큐 HTTP 요청 헤더를 반환합니다. delay.Func 외부에서 호출되면 오류를 반환합니다.

함수

type Function struct {
	// contains filtered or unexported fields
}

Function은 지연된 호출이 있을 수 있는 함수를 나타냅니다.

func Func

func Func(key string, i interface{}) *Function

Func는 새 Function을 선언합니다. 두 번째 인수는 첫 번째 인수가 context.Context 유형인 함수여야 합니다. 이 함수는 프로그램 초기화 시점에 호출되어야 합니다. 즉, 전역 변수 선언이나 init 함수에서 호출되어야 합니다. 이 제한이 필요한 이유는 함수 호출을 지연하는 인스턴스가 이 함수를 실행하는 인스턴스가 아닐 수도 있기 때문입니다. 요청을 받기 전에 인스턴스에 의해 실행되었음이 보장되는 유일한 것은 프로그램 초기화 시점에 실행된 코드입니다.

func (*Function) Call

func (f *Function) Call(c context.Context, args ...interface{}) error

Call은 지연된 함수를 호출합니다.

err := f.Call(c, ...)

위 항목은 다음과 동일합니다.

t, _ := f.Task(...)
_, err := taskqueue.Add(c, t, "")

func (*Function) Task

func (f *Function) Task(args ...interface{}) (*taskqueue.Task, error)

Task는 함수를 호출하는 Task를 생성합니다. 대기열에 추가하기 전에 매개변수가 조정될 수 있습니다. 사용자는 반환된 Task의 Path 또는 Payload 필드를 수정해서는 안 됩니다.