Go 언어로 gRPC에 들어가는 3 단독 캡처기
그때 여기 있었어.
콘센트는 인증 외에도 로킹 등 정형 처리가 준비돼 있어 편리해 보인다.
다만, 실제 업무에서 혼자 처리할 때가 있을 것 같아서 이 글에서 카스타임 캡처기 테스트를 해봤습니다.
rails의before,after,java의Spring의interceptor에 익숙해진 사람이라면 금방 인상을 남길 수 있을 것 같아요.
이 글에서 이전 이름만 주면 hello
지난번 기사가 여기 있습니다.
단독 절취기 추가
server.go에서 다음 함수를 정의합니다.
이것은 단독 캡처기의 처리 내용이다.
함수 중간의handler () 는 원시 처리를 요청해야 합니다.
func CustomInterceptor() grpc.UnaryServerInterceptor {
return func(ctx context.Context, request interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHand
fmt.Printf("before process")
helloMessage, _ := request.(*hello.HelloMessage)
helloMessage.Name = fmt.Sprintf("<<< %s >>>", helloMessage.Name)
res, err := handler(ctx, request)
if err != nil {
return nil, err
}
fmt.Println("after process")
helloResponse, _ := res.(*hello.HelloResponse)
helloResponse.Msg = fmt.Sprintf("*** %s ***", helloResponse.Msg)
return res, nil
}
}
단독 캡처 설정
server.goo의 다음 부분을 수정합니다.
이렇게 매번 요청할 때마다 처리해야 하는 캡처기를 등록합니다.
server := grpc.NewServer(
grpc.UnaryInterceptor(CustomInterceptor()),
)
코드 전체 텍스트
다음은 서버입니다.goo의 코드 전문.
package main
import (
"context"
"fmt"
"log"
"net"
"test/hello"
"google.golang.org/grpc"
)
func main() {
listenPort, err := net.Listen("tcp", ":19003")
if err != nil {
log.Fatal(err)
}
server := grpc.NewServer(
grpc.UnaryInterceptor(CustomInterceptor()),
)
hello.RegisterHelloServer(server, &Hello{})
server.Serve(listenPort)
}
type Hello struct{}
func (h *Hello) Hello(cts context.Context, message *hello.HelloMessage) (*hello.HelloResponse, error) {
res := hello.HelloResponse{Msg: fmt.Sprintf("hello %s", message.Name)}
return &res, nil
}
func CustomInterceptor() grpc.UnaryServerInterceptor {
return func(ctx context.Context, request interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
fmt.Printf("before process")
helloMessage, _ := request.(*hello.HelloMessage)
helloMessage.Name = fmt.Sprintf("<<< %s >>>", helloMessage.Name)
res, err := handler(ctx, request)
if err != nil {
return nil, err
}
fmt.Println("after process")
helloResponse, _ := res.(*hello.HelloResponse)
helloResponse.Msg = fmt.Sprintf("*** %s ***", helloResponse.Msg)
return res, nil
}
}
Reference
이 문제에 관하여(Go 언어로 gRPC에 들어가는 3 단독 캡처기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/miyazi777/articles/fd534aae40c7f3d6ac5e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)