>백엔드 개발 >Golang >Golang grpc 서버 메소드의 인터셉터에서 로깅 클라이언트 재사용

Golang grpc 서버 메소드의 인터셉터에서 로깅 클라이언트 재사용

PHPz
PHPz앞으로
2024-02-06 09:03:12424검색

在 Golang grpc 服务器方法的拦截器中重用日志客户端

질문 내용

go를 사용하여 grpc 서버를 구축하고 있습니다. 현재 서버는 세 가지 방법을 제공합니다:

  • 과제 제출
  • 작업 취소
  • 작업 상태 가져오기

요청 횟수, 기간 등과 같은 일부 측정항목을 기록하기 위해 datadog을 사용하고 있습니다. submitjob 메소드는 다음과 같습니다:

으아악

이 세 가지 서버 방법의 로깅 코드는 거의 동일합니다. 그래서 이러한 중복을 피하는 방법을 알고 싶습니다.

golang grpc에는 인터셉터 개념이 있다는 것을 알았습니다. 기본적으로 인터셉터 기능을 정의하고 이를 사용하여 서버 메서드 호출의 사전/사후 처리를 수행할 수 있습니다.

문서에 따라 다음과 같이 인터셉터를 작성했습니다.

으아악

문제는 인터셉터가 호출될 때마다 새로운 datadog 클라이언트를 생성하고 파괴한다는 것입니다. 나는 이것이 불필요하다고 생각한다. 하지만 unaryinterceptor는 클래스가 아닌 메소드일 뿐이므로 datadog 클라이언트를 한 번 생성하고 나중에 다시 사용할 수 있는 방법은 없나요? 내 필요를 충족시킬 수 있는 방법이 있나요?


정답


네, 바로 만들지 말고 다른 파일/패키지로 옮겨서 datadog.go라고 부르자

싱글톤으로 선언해야 다음과 같은 모든 용도에 포인터가 1개만 있습니다...

(저는 "newdatadogclient" 함수에 의해 반환된 데이터 유형을 참조하기 위해 "datadogtype" 유형을 사용합니다. 보다 정확한 예제 코드를 제공하려면 패키지와 버전을 지정하십시오)

으아악

이제 사용 사례에 따라 포인터로 반환하고 닫으면 사용이 모두 닫히므로 포인터 자체를 반환하고 닫는 부분을 생략하거나 값을 반환하므로 복사본이 됩니다. 원본

그런데, 사용 중인 데이터독 버전과 특정 패키지를 공유할 수 있나요?

위 내용은 Golang grpc 서버 메소드의 인터셉터에서 로깅 클라이언트 재사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제